{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# CPSC 330 Lecture 17"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Lecture plan\n",
    "\n",
    "- 👋\n",
    "- **Turn on recording**\n",
    "- Announcements\n",
    "- Today's dataset (5 min)\n",
    "- Train/test splits with temporal data (15 min)\n",
    "- Encoding date/time as feature(s) (20 min) <- we didn't cover all of this due to time\n",
    "- Break (5 min)\n",
    "- Lag-based features (15 min)\n",
    "- Forecasting further into the future (10 min)\n",
    "- Trends (5 min)\n",
    "- What did we not cover? (5 min)\n",
    "\n",
    "**Note: this lecture is 5-10 min too long**\n",
    "\n",
    "Piazza:\n",
    "\n",
    "- T/F questions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Learning objectives\n",
    "\n",
    "- Explain the pitfalls of train/test splitting with time series data.\n",
    "- Appropriately split time series data, both train/test split and cross-validation.\n",
    "- Perform time series feature engineering:\n",
    "  - Encode time as various features in a tabular dataset \n",
    "  - Create lag-based features\n",
    "- Explain different approaches for forecasting multiple time steps into the future.\n",
    "- Apply \"method 1\"  for forecasting multiple time steps into the future, namely building a model that directly predicts $k$ steps into the future.\n",
    "- Explain the challenges of time series data with unequally spaced time points.\n",
    "- At a high level, explain the concepts of seasonality and trends."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.dummy import DummyClassifier\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.model_selection import train_test_split, cross_val_score, cross_validate, TimeSeriesSplit\n",
    "\n",
    "from sklearn.impute import SimpleImputer\n",
    "from sklearn.compose import ColumnTransformer\n",
    "from sklearn.pipeline import Pipeline, make_pipeline\n",
    "from sklearn.preprocessing import StandardScaler, OrdinalEncoder, OneHotEncoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['font.size'] = 16"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Today's dataset (5 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Rain in Australia](https://www.kaggle.com/jsphyg/weather-dataset-rattle-package) dataset. Predicting whether or not it will rain tomorrow based on today's measurements."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>Pressure9am</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>13.4</td>\n",
       "      <td>22.9</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>44.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1007.7</td>\n",
       "      <td>1007.1</td>\n",
       "      <td>8.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>7.4</td>\n",
       "      <td>25.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WNW</td>\n",
       "      <td>44.0</td>\n",
       "      <td>NNW</td>\n",
       "      <td>...</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1010.6</td>\n",
       "      <td>1007.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.2</td>\n",
       "      <td>24.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>12.9</td>\n",
       "      <td>25.7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WSW</td>\n",
       "      <td>46.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>30.0</td>\n",
       "      <td>1007.6</td>\n",
       "      <td>1008.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>23.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>9.2</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NE</td>\n",
       "      <td>24.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>16.0</td>\n",
       "      <td>1017.6</td>\n",
       "      <td>1012.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.1</td>\n",
       "      <td>26.5</td>\n",
       "      <td>No</td>\n",
       "      <td>1.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>17.5</td>\n",
       "      <td>32.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1010.8</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>29.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.2</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         Date Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "0  2008-12-01   Albury     13.4     22.9       0.6          NaN       NaN   \n",
       "1  2008-12-02   Albury      7.4     25.1       0.0          NaN       NaN   \n",
       "2  2008-12-03   Albury     12.9     25.7       0.0          NaN       NaN   \n",
       "3  2008-12-04   Albury      9.2     28.0       0.0          NaN       NaN   \n",
       "4  2008-12-05   Albury     17.5     32.3       1.0          NaN       NaN   \n",
       "\n",
       "  WindGustDir  WindGustSpeed WindDir9am  ... Humidity3pm  Pressure9am  \\\n",
       "0           W           44.0          W  ...        22.0       1007.7   \n",
       "1         WNW           44.0        NNW  ...        25.0       1010.6   \n",
       "2         WSW           46.0          W  ...        30.0       1007.6   \n",
       "3          NE           24.0         SE  ...        16.0       1017.6   \n",
       "4           W           41.0        ENE  ...        33.0       1010.8   \n",
       "\n",
       "   Pressure3pm  Cloud9am  Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  \\\n",
       "0       1007.1       8.0       NaN     16.9     21.8         No      0.0   \n",
       "1       1007.8       NaN       NaN     17.2     24.3         No      0.0   \n",
       "2       1008.7       NaN       2.0     21.0     23.2         No      0.0   \n",
       "3       1012.8       NaN       NaN     18.1     26.5         No      1.0   \n",
       "4       1006.0       7.0       8.0     17.8     29.7         No      0.2   \n",
       "\n",
       "   RainTomorrow  \n",
       "0            No  \n",
       "1            No  \n",
       "2            No  \n",
       "3            No  \n",
       "4            No  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain = pd.read_csv(\"data/weatherAUS.csv\")\n",
    "df_rain.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Goals\n",
    "\n",
    "- Can the date/time features help us predict the target value?\n",
    "- Can we **forecast** into the future?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Fun fact:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "371.0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain[\"Rainfall\"].max()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3.7 metres of rain in one day?!?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TODO\n",
    "\n",
    "is this mm or cm?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Parsing datetimes \n",
    "\n",
    "- In general, datetimes are a huge pain! Think of all the formats: MM-DD-YY, DD-MM-YY, YY-MM-DD, MM/DD/YY, DD/MM/YY, DD/MM/YYYY, 20:45, 8:45am, 8:45 PM, 8:45a, 08:00, 8:10:20, .......\n",
    "- No, seriously, dealing with datetimes is THE WORST.\n",
    "  - Time zones.\n",
    "  - Daylight savings...\n",
    "- Thankfully, pandas does a pretty good job here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        2008-12-01\n",
       "1        2008-12-02\n",
       "2        2008-12-03\n",
       "3        2008-12-04\n",
       "4        2008-12-05\n",
       "            ...    \n",
       "142188   2017-06-20\n",
       "142189   2017-06-21\n",
       "142190   2017-06-22\n",
       "142191   2017-06-23\n",
       "142192   2017-06-24\n",
       "Name: Date, Length: 142193, dtype: datetime64[ns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates_rain = pd.to_datetime(df_rain[\"Date\"])\n",
    "dates_rain"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "They are all the same format, so we can also compare dates:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timedelta('1 days 00:00:00')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates_rain[1] - dates_rain[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates_rain[1] > dates_rain[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "86400.0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(dates_rain[1] - dates_rain[0]).total_seconds()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can tell pandas to parse the dates when reading in the CSV:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>Pressure9am</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>13.4</td>\n",
       "      <td>22.9</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>44.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1007.7</td>\n",
       "      <td>1007.1</td>\n",
       "      <td>8.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>7.4</td>\n",
       "      <td>25.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WNW</td>\n",
       "      <td>44.0</td>\n",
       "      <td>NNW</td>\n",
       "      <td>...</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1010.6</td>\n",
       "      <td>1007.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.2</td>\n",
       "      <td>24.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>12.9</td>\n",
       "      <td>25.7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WSW</td>\n",
       "      <td>46.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>30.0</td>\n",
       "      <td>1007.6</td>\n",
       "      <td>1008.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>23.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>9.2</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NE</td>\n",
       "      <td>24.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>16.0</td>\n",
       "      <td>1017.6</td>\n",
       "      <td>1012.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.1</td>\n",
       "      <td>26.5</td>\n",
       "      <td>No</td>\n",
       "      <td>1.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>17.5</td>\n",
       "      <td>32.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1010.8</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>29.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.2</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        Date Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "0 2008-12-01   Albury     13.4     22.9       0.6          NaN       NaN   \n",
       "1 2008-12-02   Albury      7.4     25.1       0.0          NaN       NaN   \n",
       "2 2008-12-03   Albury     12.9     25.7       0.0          NaN       NaN   \n",
       "3 2008-12-04   Albury      9.2     28.0       0.0          NaN       NaN   \n",
       "4 2008-12-05   Albury     17.5     32.3       1.0          NaN       NaN   \n",
       "\n",
       "  WindGustDir  WindGustSpeed WindDir9am  ... Humidity3pm  Pressure9am  \\\n",
       "0           W           44.0          W  ...        22.0       1007.7   \n",
       "1         WNW           44.0        NNW  ...        25.0       1010.6   \n",
       "2         WSW           46.0          W  ...        30.0       1007.6   \n",
       "3          NE           24.0         SE  ...        16.0       1017.6   \n",
       "4           W           41.0        ENE  ...        33.0       1010.8   \n",
       "\n",
       "   Pressure3pm  Cloud9am  Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  \\\n",
       "0       1007.1       8.0       NaN     16.9     21.8         No      0.0   \n",
       "1       1007.8       NaN       NaN     17.2     24.3         No      0.0   \n",
       "2       1008.7       NaN       2.0     21.0     23.2         No      0.0   \n",
       "3       1012.8       NaN       NaN     18.1     26.5         No      1.0   \n",
       "4       1006.0       7.0       8.0     17.8     29.7         No      0.2   \n",
       "\n",
       "   RainTomorrow  \n",
       "0            No  \n",
       "1            No  \n",
       "2            No  \n",
       "3            No  \n",
       "4            No  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain = pd.read_csv(\"data/weatherAUS.csv\", parse_dates=[\"Date\"])\n",
    "df_rain.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0   2008-12-01\n",
       "1   2008-12-02\n",
       "2   2008-12-03\n",
       "3   2008-12-04\n",
       "4   2008-12-05\n",
       "Name: Date, dtype: datetime64[ns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain[\"Date\"].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Train/test splits with temporal data (15 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's do the usual thing we do..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train, df_test = train_test_split(df_rain, random_state=123)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def preprocess_features(df_train, df_test, numeric_features, categorical_features, drop_features):\n",
    "\n",
    "    all_features = set(numeric_features + categorical_features + drop_features)\n",
    "    if set(df_train.columns) != all_features:\n",
    "        print(\"Missing columns\", set(df_train.columns) - all_features)\n",
    "        print(\"Extra columns\", all_features - set(df_train.columns))\n",
    "        raise Exception(\"Columns do not match\")\n",
    "    \n",
    "    numeric_transformer = Pipeline([\n",
    "        ('imputer', SimpleImputer(strategy='median')),\n",
    "        ('scaler', StandardScaler())\n",
    "    ])  \n",
    "    categorical_transformer = Pipeline([\n",
    "        ('imputer', SimpleImputer(strategy='constant', fill_value='?')),\n",
    "        ('onehot', OneHotEncoder(handle_unknown='ignore'))\n",
    "    ])\n",
    "    preprocessor = ColumnTransformer([\n",
    "        ('numeric', numeric_transformer, numeric_features),\n",
    "        ('categorical', categorical_transformer, categorical_features)\n",
    "    ])\n",
    "    preprocessor.fit(df_train);\n",
    "\n",
    "    ohe = preprocessor.named_transformers_['categorical'].named_steps['onehot']\n",
    "    ohe_feature_names = list(ohe.get_feature_names(categorical_features))\n",
    "    new_columns = numeric_features + ohe_feature_names\n",
    "\n",
    "    X_train_enc = pd.DataFrame(preprocessor.transform(df_train).toarray(), index=df_train.index, columns=new_columns)\n",
    "    X_test_enc  = pd.DataFrame(preprocessor.transform(df_test).toarray(),  index=df_test.index,  columns=new_columns)\n",
    "    \n",
    "    y_train = df_train[\"RainTomorrow\"]\n",
    "    y_test  = df_test[\"RainTomorrow\"]\n",
    "    \n",
    "    return X_train_enc, y_train, X_test_enc, y_test, preprocessor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "numeric_features = ['MinTemp', 'MaxTemp', 'Rainfall', 'Evaporation', 'Sunshine', 'WindGustSpeed', \n",
    "                    'WindSpeed9am', 'WindSpeed3pm', 'Humidity9am', 'Humidity3pm', 'Pressure9am', \n",
    "                    'Pressure3pm', 'Cloud9am', 'Cloud3pm', 'Temp9am', 'Temp3pm']\n",
    "categorical_features = ['Location', 'WindGustDir', 'WindDir9am', 'WindDir3pm', 'RainToday']\n",
    "drop_features = ['RISK_MM', 'Date', 'RainTomorrow']  # See the documentation, should not keep the column"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features, categorical_features, drop_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindSpeed9am</th>\n",
       "      <th>WindSpeed3pm</th>\n",
       "      <th>Humidity9am</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>...</th>\n",
       "      <th>WindDir3pm_SE</th>\n",
       "      <th>WindDir3pm_SSE</th>\n",
       "      <th>WindDir3pm_SSW</th>\n",
       "      <th>WindDir3pm_SW</th>\n",
       "      <th>WindDir3pm_W</th>\n",
       "      <th>WindDir3pm_WNW</th>\n",
       "      <th>WindDir3pm_WSW</th>\n",
       "      <th>RainToday_?</th>\n",
       "      <th>RainToday_No</th>\n",
       "      <th>RainToday_Yes</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>88012</th>\n",
       "      <td>0.924831</td>\n",
       "      <td>-0.480941</td>\n",
       "      <td>3.135864</td>\n",
       "      <td>-0.119919</td>\n",
       "      <td>0.148454</td>\n",
       "      <td>5.866872</td>\n",
       "      <td>4.300843</td>\n",
       "      <td>7.821727</td>\n",
       "      <td>0.799900</td>\n",
       "      <td>2.314880</td>\n",
       "      <td>...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126827</th>\n",
       "      <td>-0.387306</td>\n",
       "      <td>-0.691473</td>\n",
       "      <td>-0.179868</td>\n",
       "      <td>-0.307113</td>\n",
       "      <td>1.305477</td>\n",
       "      <td>1.604277</td>\n",
       "      <td>1.359141</td>\n",
       "      <td>-0.417811</td>\n",
       "      <td>-0.783708</td>\n",
       "      <td>-0.558442</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51624</th>\n",
       "      <td>-1.777546</td>\n",
       "      <td>-2.824857</td>\n",
       "      <td>-0.250919</td>\n",
       "      <td>-0.119919</td>\n",
       "      <td>0.148454</td>\n",
       "      <td>1.223688</td>\n",
       "      <td>0.340859</td>\n",
       "      <td>0.039941</td>\n",
       "      <td>0.060883</td>\n",
       "      <td>0.025962</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>138778</th>\n",
       "      <td>1.502795</td>\n",
       "      <td>1.484018</td>\n",
       "      <td>-0.274603</td>\n",
       "      <td>-0.182317</td>\n",
       "      <td>0.871594</td>\n",
       "      <td>-0.527021</td>\n",
       "      <td>-0.111710</td>\n",
       "      <td>0.383255</td>\n",
       "      <td>0.219244</td>\n",
       "      <td>0.074663</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23423</th>\n",
       "      <td>0.549935</td>\n",
       "      <td>0.150653</td>\n",
       "      <td>-0.274603</td>\n",
       "      <td>0.316865</td>\n",
       "      <td>0.148454</td>\n",
       "      <td>-0.755374</td>\n",
       "      <td>0.340859</td>\n",
       "      <td>-0.417811</td>\n",
       "      <td>-0.836495</td>\n",
       "      <td>0.464266</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129130</th>\n",
       "      <td>-0.715340</td>\n",
       "      <td>-0.902004</td>\n",
       "      <td>-0.274603</td>\n",
       "      <td>-1.305478</td>\n",
       "      <td>-1.550923</td>\n",
       "      <td>0.310275</td>\n",
       "      <td>-0.337995</td>\n",
       "      <td>-0.646687</td>\n",
       "      <td>0.166457</td>\n",
       "      <td>-0.071439</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119906</th>\n",
       "      <td>-0.215478</td>\n",
       "      <td>-0.537083</td>\n",
       "      <td>0.767484</td>\n",
       "      <td>-0.244715</td>\n",
       "      <td>1.124692</td>\n",
       "      <td>-0.679256</td>\n",
       "      <td>0.114575</td>\n",
       "      <td>-0.417811</td>\n",
       "      <td>-0.678134</td>\n",
       "      <td>-0.168839</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17730</th>\n",
       "      <td>0.706141</td>\n",
       "      <td>-0.242339</td>\n",
       "      <td>1.359579</td>\n",
       "      <td>-0.119919</td>\n",
       "      <td>0.148454</td>\n",
       "      <td>1.223688</td>\n",
       "      <td>1.132856</td>\n",
       "      <td>1.642074</td>\n",
       "      <td>1.063835</td>\n",
       "      <td>1.486973</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28030</th>\n",
       "      <td>0.221900</td>\n",
       "      <td>-1.112535</td>\n",
       "      <td>0.459595</td>\n",
       "      <td>-0.119919</td>\n",
       "      <td>0.148454</td>\n",
       "      <td>1.299806</td>\n",
       "      <td>-0.903707</td>\n",
       "      <td>-0.188935</td>\n",
       "      <td>1.591704</td>\n",
       "      <td>0.805168</td>\n",
       "      <td>...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15725</th>\n",
       "      <td>-0.371685</td>\n",
       "      <td>-0.691473</td>\n",
       "      <td>-0.203551</td>\n",
       "      <td>-0.119919</td>\n",
       "      <td>0.148454</td>\n",
       "      <td>-0.070314</td>\n",
       "      <td>-1.356276</td>\n",
       "      <td>-1.447753</td>\n",
       "      <td>0.377605</td>\n",
       "      <td>0.561666</td>\n",
       "      <td>...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>106644 rows × 119 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         MinTemp   MaxTemp  Rainfall  Evaporation  Sunshine  WindGustSpeed  \\\n",
       "88012   0.924831 -0.480941  3.135864    -0.119919  0.148454       5.866872   \n",
       "126827 -0.387306 -0.691473 -0.179868    -0.307113  1.305477       1.604277   \n",
       "51624  -1.777546 -2.824857 -0.250919    -0.119919  0.148454       1.223688   \n",
       "138778  1.502795  1.484018 -0.274603    -0.182317  0.871594      -0.527021   \n",
       "23423   0.549935  0.150653 -0.274603     0.316865  0.148454      -0.755374   \n",
       "...          ...       ...       ...          ...       ...            ...   \n",
       "129130 -0.715340 -0.902004 -0.274603    -1.305478 -1.550923       0.310275   \n",
       "119906 -0.215478 -0.537083  0.767484    -0.244715  1.124692      -0.679256   \n",
       "17730   0.706141 -0.242339  1.359579    -0.119919  0.148454       1.223688   \n",
       "28030   0.221900 -1.112535  0.459595    -0.119919  0.148454       1.299806   \n",
       "15725  -0.371685 -0.691473 -0.203551    -0.119919  0.148454      -0.070314   \n",
       "\n",
       "        WindSpeed9am  WindSpeed3pm  Humidity9am  Humidity3pm  ...  \\\n",
       "88012       4.300843      7.821727     0.799900     2.314880  ...   \n",
       "126827      1.359141     -0.417811    -0.783708    -0.558442  ...   \n",
       "51624       0.340859      0.039941     0.060883     0.025962  ...   \n",
       "138778     -0.111710      0.383255     0.219244     0.074663  ...   \n",
       "23423       0.340859     -0.417811    -0.836495     0.464266  ...   \n",
       "...              ...           ...          ...          ...  ...   \n",
       "129130     -0.337995     -0.646687     0.166457    -0.071439  ...   \n",
       "119906      0.114575     -0.417811    -0.678134    -0.168839  ...   \n",
       "17730       1.132856      1.642074     1.063835     1.486973  ...   \n",
       "28030      -0.903707     -0.188935     1.591704     0.805168  ...   \n",
       "15725      -1.356276     -1.447753     0.377605     0.561666  ...   \n",
       "\n",
       "        WindDir3pm_SE  WindDir3pm_SSE  WindDir3pm_SSW  WindDir3pm_SW  \\\n",
       "88012             1.0             0.0             0.0            0.0   \n",
       "126827            0.0             0.0             0.0            0.0   \n",
       "51624             0.0             0.0             0.0            0.0   \n",
       "138778            0.0             0.0             0.0            0.0   \n",
       "23423             0.0             0.0             0.0            0.0   \n",
       "...               ...             ...             ...            ...   \n",
       "129130            0.0             0.0             0.0            0.0   \n",
       "119906            0.0             0.0             0.0            0.0   \n",
       "17730             0.0             0.0             1.0            0.0   \n",
       "28030             0.0             0.0             1.0            0.0   \n",
       "15725             1.0             0.0             0.0            0.0   \n",
       "\n",
       "        WindDir3pm_W  WindDir3pm_WNW  WindDir3pm_WSW  RainToday_?  \\\n",
       "88012            0.0             0.0             0.0          0.0   \n",
       "126827           0.0             1.0             0.0          0.0   \n",
       "51624            0.0             0.0             0.0          0.0   \n",
       "138778           0.0             0.0             0.0          0.0   \n",
       "23423            0.0             0.0             0.0          0.0   \n",
       "...              ...             ...             ...          ...   \n",
       "129130           0.0             0.0             0.0          0.0   \n",
       "119906           0.0             0.0             1.0          0.0   \n",
       "17730            0.0             0.0             0.0          0.0   \n",
       "28030            0.0             0.0             0.0          0.0   \n",
       "15725            0.0             0.0             0.0          0.0   \n",
       "\n",
       "        RainToday_No  RainToday_Yes  \n",
       "88012            0.0            1.0  \n",
       "126827           1.0            0.0  \n",
       "51624            1.0            0.0  \n",
       "138778           1.0            0.0  \n",
       "23423            1.0            0.0  \n",
       "...              ...            ...  \n",
       "129130           1.0            0.0  \n",
       "119906           0.0            1.0  \n",
       "17730            0.0            1.0  \n",
       "28030            0.0            1.0  \n",
       "15725            1.0            0.0  \n",
       "\n",
       "[106644 rows x 119 columns]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train_enc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we do the modelling:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8488241251265894"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8482095136290754"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- But, wait a minute, I did something wrong. Any ideas?\n",
    "\n",
    "<br><br><br><br><br><br>\n",
    "\n",
    "- Let's look at the dates in our train/test split:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2017-06-25 00:00:00')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train[\"Date\"].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2007-11-03 00:00:00')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_test[\"Date\"].min()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- So, we are training on data that came before our test data!\n",
    "- If we want to forecast, we aren't allowed to know what happened in the future!\n",
    "- There may be cases where this is OK, e.g. if you aren't trying to forecast and just want to understand your data (maybe you're not even splitting).\n",
    "- But, for our purposes, we want to avoid this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# test_pred = df_test.sort_values(by=[\"Location\", \"Date\"])\n",
    "# np.mean(test_pred[\"RainToday\"].iloc[1:].values == test_pred[\"RainTomorrow\"].iloc[-1:].values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_train_sort = df_train.query(\"Location == 'Sydney'\").sort_values(by=\"Date\")\n",
    "df_test_sort = df_test.query(\"Location == 'Sydney'\").sort_values(by=\"Date\")\n",
    "\n",
    "plt.plot(df_train_sort[\"Date\"], df_train_sort[\"Rainfall\"], 'b', label='train');\n",
    "plt.plot(df_test_sort[\"Date\"], df_test_sort[\"Rainfall\"], 'r', label='test');\n",
    "plt.xticks(rotation='vertical');\n",
    "plt.legend();\n",
    "plt.ylabel(\"Rainfall (mm)\");\n",
    "plt.title(\"Train/test rainfall in Sydney\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2007-11-01 00:00:00')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain[\"Date\"].min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2017-06-25 00:00:00')"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain[\"Date\"].max()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- It looks like we have 10 years of data.\n",
    "- Let's use the last 2 years for test."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_rain.query('Date <= 20150630')\n",
    "df_test  = df_rain.query('Date >  20150630')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "107502"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "34691"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.24397122221206388"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_test)/(len(df_train)+len(df_test))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, we're still using about 25% of our data as test data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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LEapTJoEG2wAo0fDbrsVTW5ERKr7qaSBGTNm0L17d9q3b28GpQKICO3bt6d79+7MmDEjaXWMKmb0aLe+++5E1ag5zKgUYcWKFbRr1y5pNWqOdu3ambvRKIvMN6DNQ1hZzKgEwGoolceuuVEuZlSSwYyKYRjNEjMqyWBGxTCMZokZlWQwo1JjjBw5kquvvjryfAcPHkyvXr0iz9cwSsWMSjKYUakx4jIqF154IY8++mjk+RpGqZhRSQbrp2L4smzZMurq6gKn33DDDWPUxjDCY209ksFqKjXE4MGDGTFiBFOnTkVEEBF69erF6NGjEREeeeQRTjzxRLp06cI666wDwBdffMHRRx9N7969adeuHRtssAFDhgxh7ty5TfLOdn9NnjwZEeG2227joosuolu3bnTs2JEDDzyQb775ppKnbdQ4VlOpLFZTqSEuvPBCZs6cyfjx4xk1ahQAdXV1zJ8/H4DTTjuNfffdl/vuu4+lS5cC8O2337Leeutx7bXX0qlTJyZOnMiwYcPYb7/9ePXVV4vKvPzyy9l555256667mDFjBmeddRZHHXUUY8aMie9EDQNzfyWFGZUSOP10eOedZHXYemu49tpwx2y44YZ06dKFNm3asOOODbMJjPa6Hm+//fYMHz680TEDBgxgwIABP/zfeeed2Wijjejfvz9vv/02P/nJTwrK7NmzJw888MAP/2fOnMk555zDt99+y7rrrhvuBAwjBGZUksHcX8YPHHzwwU22LV++nGHDhtG3b1/atWtH69at6d+/PwCffvpp0Tz333//Rv+33HJLAL766qsINDaM/JhRSQarqZRA2BpCtdCtW7cm28477zxuuOEGLrroInbeeWc6dOjAN998wyGHHPKDi6wQnTt3bvQ/E/wPcqxhlIMZlWQwo2L8gN/QKA899BDHHHMMF1xwwQ/bFi5cWEm1DKMkzKgkg7m/aoy6ujqWLFkSOP3ixYtp3bp1o21327CvRhVgRiUZrKZSY2y22WbMmTOHW265hX79+tG2bduC6ffZZx9GjBjBlltuyUYbbcQjjzzCuHHjKqRt9aAKjz4KgwZBK3urUoH1U0kGq6nUGCeccAK//OUvOf/889l+++058MADC6a/4YYbGDRoEH/605844ogj+P7773nwwQcrpG31MGoUHHooDBuWtCZGLlZTqSz2TVVjrLbaar5GQfO8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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_train_sort = df_train.query(\"Location == 'Sydney'\").sort_values(by=\"Date\")\n",
    "df_test_sort = df_test.query(\"Location == 'Sydney'\").sort_values(by=\"Date\")\n",
    "\n",
    "plt.plot(df_train_sort[\"Date\"], df_train_sort[\"Rainfall\"], 'b', label='train');\n",
    "plt.plot(df_test_sort[\"Date\"], df_test_sort[\"Rainfall\"], 'r', label='test');\n",
    "plt.xticks(rotation='vertical');\n",
    "plt.legend();\n",
    "plt.ylabel(\"Rainfall (mm)\");\n",
    "plt.title(\"Train/test rainfall in Sydney\");"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We're learning relationships from the blue part; predicting only using features in the red part from the day before."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features, categorical_features, drop_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8501888336961173"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.844368856475743"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- In this case it didn't seem to really matter - we get about the same scores.\n",
    "- However, in general we should split conservatively if we can."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Humidity3pm</th>\n",
       "      <td>1.243177</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_?</th>\n",
       "      <td>0.918921</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure9am</th>\n",
       "      <td>0.865433</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Witchcliffe</th>\n",
       "      <td>0.728615</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <td>0.720383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_No</th>\n",
       "      <td>-0.722747</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Katherine</th>\n",
       "      <td>-0.726450</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Wollongong</th>\n",
       "      <td>-0.749180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_MountGinini</th>\n",
       "      <td>-0.965270</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure3pm</th>\n",
       "      <td>-1.221832</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>119 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                          Coef\n",
       "Humidity3pm           1.243177\n",
       "RainToday_?           0.918921\n",
       "Pressure9am           0.865433\n",
       "Location_Witchcliffe  0.728615\n",
       "WindGustSpeed         0.720383\n",
       "...                        ...\n",
       "RainToday_No         -0.722747\n",
       "Location_Katherine   -0.726450\n",
       "Location_Wollongong  -0.749180\n",
       "Location_MountGinini -0.965270\n",
       "Pressure3pm          -1.221832\n",
       "\n",
       "[119 rows x 1 columns]"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.sort_values(by=\"Coef\", ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "dc = DummyClassifier(strategy='prior')\n",
    "dc.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7750553478074826"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "No     83320\n",
       "Yes    24182\n",
       "Name: RainTomorrow, dtype: int64"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7781845435415525"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dc.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Cross-validation\n",
    "\n",
    "What about cross-validation? \n",
    "\n",
    "- We can't do regular cross-validation if we don't want to be predicting the past.\n",
    "- Cross-validation randomly shuffles the rows, so you might get rows in your training set that occur after rows in your validation set. This isn't 100% terrible in that you're still predicting next week's price regardless, but it's not a good idea. Especially if there are trends in the dataset, and then you get to see what happened to the trend in the future.\n",
    "- Actually, our training split is a bit weird because we \"have the answers\" in the training set. But our testing procedure is conservative.\n",
    "- If we want, there is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import TimeSeriesSplit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "see https://scikit-learn.org/stable/modules/cross_validation.html#time-series-split"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, things are actually more complicated here because this dataset has **multiple time series**, one per location. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>Pressure9am</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>13.4</td>\n",
       "      <td>22.9</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>44.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1007.7</td>\n",
       "      <td>1007.1</td>\n",
       "      <td>8.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>7.4</td>\n",
       "      <td>25.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WNW</td>\n",
       "      <td>44.0</td>\n",
       "      <td>NNW</td>\n",
       "      <td>...</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1010.6</td>\n",
       "      <td>1007.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.2</td>\n",
       "      <td>24.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>12.9</td>\n",
       "      <td>25.7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WSW</td>\n",
       "      <td>46.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>30.0</td>\n",
       "      <td>1007.6</td>\n",
       "      <td>1008.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>23.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>9.2</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NE</td>\n",
       "      <td>24.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>16.0</td>\n",
       "      <td>1017.6</td>\n",
       "      <td>1012.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.1</td>\n",
       "      <td>26.5</td>\n",
       "      <td>No</td>\n",
       "      <td>1.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>17.5</td>\n",
       "      <td>32.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1010.8</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>29.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.2</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141474</th>\n",
       "      <td>2015-06-26</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>3.8</td>\n",
       "      <td>18.3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>E</td>\n",
       "      <td>39.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>37.0</td>\n",
       "      <td>1031.5</td>\n",
       "      <td>1027.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.8</td>\n",
       "      <td>17.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141475</th>\n",
       "      <td>2015-06-27</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>2.5</td>\n",
       "      <td>17.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>E</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>40.0</td>\n",
       "      <td>1029.9</td>\n",
       "      <td>1026.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.0</td>\n",
       "      <td>15.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141476</th>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>4.5</td>\n",
       "      <td>19.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ENE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>39.0</td>\n",
       "      <td>1028.7</td>\n",
       "      <td>1025.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.9</td>\n",
       "      <td>18.0</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141477</th>\n",
       "      <td>2015-06-29</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>7.6</td>\n",
       "      <td>22.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>33.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>37.0</td>\n",
       "      <td>1027.2</td>\n",
       "      <td>1023.8</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11.7</td>\n",
       "      <td>21.5</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141478</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>6.8</td>\n",
       "      <td>21.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1028.6</td>\n",
       "      <td>1025.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.6</td>\n",
       "      <td>20.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>107502 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Date Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "0      2008-12-01   Albury     13.4     22.9       0.6          NaN       NaN   \n",
       "1      2008-12-02   Albury      7.4     25.1       0.0          NaN       NaN   \n",
       "2      2008-12-03   Albury     12.9     25.7       0.0          NaN       NaN   \n",
       "3      2008-12-04   Albury      9.2     28.0       0.0          NaN       NaN   \n",
       "4      2008-12-05   Albury     17.5     32.3       1.0          NaN       NaN   \n",
       "...           ...      ...      ...      ...       ...          ...       ...   \n",
       "141474 2015-06-26    Uluru      3.8     18.3       0.0          NaN       NaN   \n",
       "141475 2015-06-27    Uluru      2.5     17.1       0.0          NaN       NaN   \n",
       "141476 2015-06-28    Uluru      4.5     19.6       0.0          NaN       NaN   \n",
       "141477 2015-06-29    Uluru      7.6     22.0       0.0          NaN       NaN   \n",
       "141478 2015-06-30    Uluru      6.8     21.1       0.0          NaN       NaN   \n",
       "\n",
       "       WindGustDir  WindGustSpeed WindDir9am  ... Humidity3pm  Pressure9am  \\\n",
       "0                W           44.0          W  ...        22.0       1007.7   \n",
       "1              WNW           44.0        NNW  ...        25.0       1010.6   \n",
       "2              WSW           46.0          W  ...        30.0       1007.6   \n",
       "3               NE           24.0         SE  ...        16.0       1017.6   \n",
       "4                W           41.0        ENE  ...        33.0       1010.8   \n",
       "...            ...            ...        ...  ...         ...          ...   \n",
       "141474           E           39.0        ESE  ...        37.0       1031.5   \n",
       "141475           E           41.0        ESE  ...        40.0       1029.9   \n",
       "141476         ENE           35.0        ESE  ...        39.0       1028.7   \n",
       "141477         ESE           33.0         SE  ...        37.0       1027.2   \n",
       "141478         ESE           35.0        ESE  ...        35.0       1028.6   \n",
       "\n",
       "        Pressure3pm  Cloud9am  Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  \\\n",
       "0            1007.1       8.0       NaN     16.9     21.8         No      0.0   \n",
       "1            1007.8       NaN       NaN     17.2     24.3         No      0.0   \n",
       "2            1008.7       NaN       2.0     21.0     23.2         No      0.0   \n",
       "3            1012.8       NaN       NaN     18.1     26.5         No      1.0   \n",
       "4            1006.0       7.0       8.0     17.8     29.7         No      0.2   \n",
       "...             ...       ...       ...      ...      ...        ...      ...   \n",
       "141474       1027.6       NaN       NaN      8.8     17.2         No      0.0   \n",
       "141475       1026.0       NaN       NaN      7.0     15.7         No      0.0   \n",
       "141476       1025.0       NaN       3.0      8.9     18.0         No      0.0   \n",
       "141477       1023.8       6.0       7.0     11.7     21.5         No      0.0   \n",
       "141478       1025.2       3.0       NaN     10.6     20.2         No      0.0   \n",
       "\n",
       "        RainTomorrow  \n",
       "0                 No  \n",
       "1                 No  \n",
       "2                 No  \n",
       "3                 No  \n",
       "4                 No  \n",
       "...              ...  \n",
       "141474            No  \n",
       "141475            No  \n",
       "141476            No  \n",
       "141477            No  \n",
       "141478            No  \n",
       "\n",
       "[107502 rows x 24 columns]"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>Pressure9am</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55977</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Ballarat</td>\n",
       "      <td>-0.3</td>\n",
       "      <td>10.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>26.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>63.0</td>\n",
       "      <td>1029.5</td>\n",
       "      <td>1027.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>4.7</td>\n",
       "      <td>9.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.4</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116980</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>PerthAirport</td>\n",
       "      <td>10.1</td>\n",
       "      <td>23.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.2</td>\n",
       "      <td>5.8</td>\n",
       "      <td>NNE</td>\n",
       "      <td>31.0</td>\n",
       "      <td>NE</td>\n",
       "      <td>...</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1023.6</td>\n",
       "      <td>1021.7</td>\n",
       "      <td>7.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>13.3</td>\n",
       "      <td>22.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59015</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Bendigo</td>\n",
       "      <td>0.3</td>\n",
       "      <td>11.4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>19.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>56.0</td>\n",
       "      <td>1029.3</td>\n",
       "      <td>1027.4</td>\n",
       "      <td>8.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>6.4</td>\n",
       "      <td>10.5</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65018</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>MelbourneAirport</td>\n",
       "      <td>3.2</td>\n",
       "      <td>13.2</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.8</td>\n",
       "      <td>3.9</td>\n",
       "      <td>N</td>\n",
       "      <td>20.0</td>\n",
       "      <td>N</td>\n",
       "      <td>...</td>\n",
       "      <td>50.0</td>\n",
       "      <td>1029.6</td>\n",
       "      <td>1027.3</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>5.3</td>\n",
       "      <td>11.9</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141478</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>6.8</td>\n",
       "      <td>21.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1028.6</td>\n",
       "      <td>1025.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.6</td>\n",
       "      <td>20.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Date          Location  MinTemp  MaxTemp  Rainfall  Evaporation  \\\n",
       "55977  2015-06-30          Ballarat     -0.3     10.5       0.0          NaN   \n",
       "116980 2015-06-30      PerthAirport     10.1     23.5       0.0          3.2   \n",
       "59015  2015-06-30           Bendigo      0.3     11.4       0.0          NaN   \n",
       "65018  2015-06-30  MelbourneAirport      3.2     13.2       0.0          0.8   \n",
       "141478 2015-06-30             Uluru      6.8     21.1       0.0          NaN   \n",
       "\n",
       "        Sunshine WindGustDir  WindGustSpeed WindDir9am  ... Humidity3pm  \\\n",
       "55977        NaN           S           26.0        NaN  ...        63.0   \n",
       "116980       5.8         NNE           31.0         NE  ...        33.0   \n",
       "59015        NaN           W           19.0        NaN  ...        56.0   \n",
       "65018        3.9           N           20.0          N  ...        50.0   \n",
       "141478       NaN         ESE           35.0        ESE  ...        35.0   \n",
       "\n",
       "        Pressure9am  Pressure3pm  Cloud9am  Cloud3pm  Temp9am  Temp3pm  \\\n",
       "55977        1029.5       1027.7       NaN       8.0      4.7      9.3   \n",
       "116980       1023.6       1021.7       7.0       6.0     13.3     22.2   \n",
       "59015        1029.3       1027.4       8.0       7.0      6.4     10.5   \n",
       "65018        1029.6       1027.3       2.0       7.0      5.3     11.9   \n",
       "141478       1028.6       1025.2       3.0       NaN     10.6     20.2   \n",
       "\n",
       "        RainToday  RISK_MM  RainTomorrow  \n",
       "55977          No      0.4            No  \n",
       "116980         No      0.0            No  \n",
       "59015          No      0.0            No  \n",
       "65018          No      0.0            No  \n",
       "141478         No      0.0            No  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.sort_values(by=[\"Date\"]).tail()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- It seems the dataframe is sorted by location, and then time. \n",
    "- Our approach today will be to ignore the fact that we have multiple time series and just OHE the location\n",
    "- We'll have multiple measurements for a given timestamp, and that's OK.\n",
    "- But, `TimeSeriesSplit` expects the dataframe to be sorted by date so..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train_ordered = df_train.sort_values(by=[\"Date\"])\n",
    "y_train_ordered = df_train_ordered[\"RainTomorrow\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8478763185801196"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(lr_pipe, df_train_ordered, y_train_ordered, cv=TimeSeriesSplit()).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- This gives us a slightly more conservative (lower) score than a regular \"shuffle split\" CV.\n",
    "  - Not sure if that is meaningful or just randomness\n",
    "- Note that I have to explicitly tell it to shuffle because we didn't do a `train_test_split` which is where our shuffling usually comes from."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import ShuffleSplit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8498000186029208"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(lr_pipe, df_train, y_train, cv=ShuffleSplit()).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you do unshuffled CV the score is significantly lower:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.805407887788886"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_val_score(lr_pipe, df_train, y_train).mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- This was a head-scratcher\n",
    "- I believe it may be because of the locations, and the lack of shuffling\n",
    "- We want each split to have some of all locations, but this way we might have nothing from a given location in the train set"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](img/mike_whatever.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Encoding date/time as feature(s) (20 min)\n",
    "\n",
    "- Can we use the `Date` to help us predict the target?\n",
    "- Probably! E.g. different amounts of rain in different seasons.\n",
    "- This is feature engineering!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Encoding time as an number\n",
    "\n",
    "- Idea 1: create a column of \"days since Nov 1, 2007\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "first_day = df_train[\"Date\"].min()\n",
    "\n",
    "df_train = df_train.assign(Days_since=df_train[\"Date\"].apply(lambda x: (x-first_day).days))\n",
    "df_test = df_test.assign(Days_since=df_test[\"Date\"].apply(lambda x: (x-first_day).days))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Pressure9am</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "      <th>Days_since</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>44351</th>\n",
       "      <td>2007-11-01</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>8.0</td>\n",
       "      <td>24.3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.4</td>\n",
       "      <td>6.3</td>\n",
       "      <td>NW</td>\n",
       "      <td>30.0</td>\n",
       "      <td>SW</td>\n",
       "      <td>...</td>\n",
       "      <td>1019.7</td>\n",
       "      <td>1015.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>14.4</td>\n",
       "      <td>23.6</td>\n",
       "      <td>No</td>\n",
       "      <td>3.6</td>\n",
       "      <td>Yes</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44352</th>\n",
       "      <td>2007-11-02</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>14.0</td>\n",
       "      <td>26.9</td>\n",
       "      <td>3.6</td>\n",
       "      <td>4.4</td>\n",
       "      <td>9.7</td>\n",
       "      <td>ENE</td>\n",
       "      <td>39.0</td>\n",
       "      <td>E</td>\n",
       "      <td>...</td>\n",
       "      <td>1012.4</td>\n",
       "      <td>1008.4</td>\n",
       "      <td>5.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>17.5</td>\n",
       "      <td>25.7</td>\n",
       "      <td>Yes</td>\n",
       "      <td>3.6</td>\n",
       "      <td>Yes</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44353</th>\n",
       "      <td>2007-11-03</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>13.7</td>\n",
       "      <td>23.4</td>\n",
       "      <td>3.6</td>\n",
       "      <td>5.8</td>\n",
       "      <td>3.3</td>\n",
       "      <td>NW</td>\n",
       "      <td>85.0</td>\n",
       "      <td>N</td>\n",
       "      <td>...</td>\n",
       "      <td>1009.5</td>\n",
       "      <td>1007.2</td>\n",
       "      <td>8.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>15.4</td>\n",
       "      <td>20.2</td>\n",
       "      <td>Yes</td>\n",
       "      <td>39.8</td>\n",
       "      <td>Yes</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44354</th>\n",
       "      <td>2007-11-04</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>13.3</td>\n",
       "      <td>15.5</td>\n",
       "      <td>39.8</td>\n",
       "      <td>7.2</td>\n",
       "      <td>9.1</td>\n",
       "      <td>NW</td>\n",
       "      <td>54.0</td>\n",
       "      <td>WNW</td>\n",
       "      <td>...</td>\n",
       "      <td>1005.5</td>\n",
       "      <td>1007.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>13.5</td>\n",
       "      <td>14.1</td>\n",
       "      <td>Yes</td>\n",
       "      <td>2.8</td>\n",
       "      <td>Yes</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44355</th>\n",
       "      <td>2007-11-05</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>7.6</td>\n",
       "      <td>16.1</td>\n",
       "      <td>2.8</td>\n",
       "      <td>5.6</td>\n",
       "      <td>10.6</td>\n",
       "      <td>SSE</td>\n",
       "      <td>50.0</td>\n",
       "      <td>SSE</td>\n",
       "      <td>...</td>\n",
       "      <td>1018.3</td>\n",
       "      <td>1018.5</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11.1</td>\n",
       "      <td>15.4</td>\n",
       "      <td>Yes</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            Date  Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "44351 2007-11-01  Canberra      8.0     24.3       0.0          3.4       6.3   \n",
       "44352 2007-11-02  Canberra     14.0     26.9       3.6          4.4       9.7   \n",
       "44353 2007-11-03  Canberra     13.7     23.4       3.6          5.8       3.3   \n",
       "44354 2007-11-04  Canberra     13.3     15.5      39.8          7.2       9.1   \n",
       "44355 2007-11-05  Canberra      7.6     16.1       2.8          5.6      10.6   \n",
       "\n",
       "      WindGustDir  WindGustSpeed WindDir9am  ... Pressure9am  Pressure3pm  \\\n",
       "44351          NW           30.0         SW  ...      1019.7       1015.0   \n",
       "44352         ENE           39.0          E  ...      1012.4       1008.4   \n",
       "44353          NW           85.0          N  ...      1009.5       1007.2   \n",
       "44354          NW           54.0        WNW  ...      1005.5       1007.0   \n",
       "44355         SSE           50.0        SSE  ...      1018.3       1018.5   \n",
       "\n",
       "       Cloud9am  Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  RainTomorrow  \\\n",
       "44351       7.0       7.0     14.4     23.6         No      3.6           Yes   \n",
       "44352       5.0       3.0     17.5     25.7        Yes      3.6           Yes   \n",
       "44353       8.0       7.0     15.4     20.2        Yes     39.8           Yes   \n",
       "44354       2.0       7.0     13.5     14.1        Yes      2.8           Yes   \n",
       "44355       7.0       7.0     11.1     15.4        Yes      0.0            No   \n",
       "\n",
       "       Days_since  \n",
       "44351           0  \n",
       "44352           1  \n",
       "44353           2  \n",
       "44354           3  \n",
       "44355           4  \n",
       "\n",
       "[5 rows x 25 columns]"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.sort_values(by='Date').head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features  + [\"Days_since\"], \n",
    "        categorical_features, \n",
    "        drop_features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.850160927238563"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8446282897581505"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Can you think of other ways to generate features from the `Date` column? \n",
    "- What about the month - that seems relevant. How should we encode the month? \n",
    "\n",
    "<br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another idea month: encode as integer, categorical variable?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### One-hot encoding of the month"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_rain.query('Date <= 20150630')\n",
    "df_test  = df_rain.query('Date >  20150630')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_train.assign(Month=df_train[\"Date\"].apply(lambda x: x.month)) # x.month_name() to get the actual string\n",
    "df_test  = df_test.assign( Month=df_test[ \"Date\"].apply(lambda x: x.month))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TODO \n",
    "\n",
    "change to month name for this part"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Month</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>31930</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37595</th>\n",
       "      <td>2014-01-20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37594</th>\n",
       "      <td>2014-01-19</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37593</th>\n",
       "      <td>2014-01-18</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37592</th>\n",
       "      <td>2014-01-17</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46478</th>\n",
       "      <td>2013-12-05</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46477</th>\n",
       "      <td>2013-12-04</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46476</th>\n",
       "      <td>2013-12-03</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46474</th>\n",
       "      <td>2013-12-01</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>107502 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            Date  Month\n",
       "31930 2015-01-04      1\n",
       "37595 2014-01-20      1\n",
       "37594 2014-01-19      1\n",
       "37593 2014-01-18      1\n",
       "37592 2014-01-17      1\n",
       "...          ...    ...\n",
       "46478 2013-12-05     12\n",
       "46477 2013-12-04     12\n",
       "46476 2013-12-03     12\n",
       "46474 2013-12-01     12\n",
       "0     2008-12-01     12\n",
       "\n",
       "[107502 rows x 2 columns]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train[[\"Date\", \"Month\"]].sort_values(by=\"Month\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features, \n",
    "        categorical_features + [\"Month\"], \n",
    "        drop_features)\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8499190712730926"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8437635121501253"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Humidity3pm</th>\n",
       "      <td>1.267032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_?</th>\n",
       "      <td>0.940020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure9am</th>\n",
       "      <td>0.799124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Witchcliffe</th>\n",
       "      <td>0.748486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <td>0.705698</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Darwin</th>\n",
       "      <td>-0.735932</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Wollongong</th>\n",
       "      <td>-0.748720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Townsville</th>\n",
       "      <td>-0.903383</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Katherine</th>\n",
       "      <td>-0.928399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure3pm</th>\n",
       "      <td>-1.181971</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>131 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                          Coef\n",
       "Humidity3pm           1.267032\n",
       "RainToday_?           0.940020\n",
       "Pressure9am           0.799124\n",
       "Location_Witchcliffe  0.748486\n",
       "WindGustSpeed         0.705698\n",
       "...                        ...\n",
       "Location_Darwin      -0.735932\n",
       "Location_Wollongong  -0.748720\n",
       "Location_Townsville  -0.903383\n",
       "Location_Katherine   -0.928399\n",
       "Pressure3pm          -1.181971\n",
       "\n",
       "[131 rows x 1 columns]"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.sort_values(by=\"Coef\", ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Month_1</th>\n",
       "      <td>-0.417780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_2</th>\n",
       "      <td>-0.155865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_3</th>\n",
       "      <td>-0.116287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_4</th>\n",
       "      <td>0.092459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_5</th>\n",
       "      <td>0.156809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_6</th>\n",
       "      <td>0.064607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_7</th>\n",
       "      <td>0.178047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_8</th>\n",
       "      <td>0.232103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_9</th>\n",
       "      <td>0.034527</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_10</th>\n",
       "      <td>0.125502</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_11</th>\n",
       "      <td>0.043165</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_12</th>\n",
       "      <td>-0.218401</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              Coef\n",
       "Month_1  -0.417780\n",
       "Month_2  -0.155865\n",
       "Month_3  -0.116287\n",
       "Month_4   0.092459\n",
       "Month_5   0.156809\n",
       "Month_6   0.064607\n",
       "Month_7   0.178047\n",
       "Month_8   0.232103\n",
       "Month_9   0.034527\n",
       "Month_10  0.125502\n",
       "Month_11  0.043165\n",
       "Month_12 -0.218401"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef.loc[\"Month_1\":\"Month_12\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### One-hot encoding seasons"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "How about just summer/winter as a feature?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "WINTER_MONTHS = {5,6,7,8,9}\n",
    "df_train = df_train.assign(Winter=df_train[\"Month\"].isin(WINTER_MONTHS))\n",
    "df_test  = df_test.assign( Winter=df_test[ \"Month\"].isin(WINTER_MONTHS))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "      <th>Month</th>\n",
       "      <th>Winter</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>13.4</td>\n",
       "      <td>22.9</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>44.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>1007.1</td>\n",
       "      <td>8.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>7.4</td>\n",
       "      <td>25.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WNW</td>\n",
       "      <td>44.0</td>\n",
       "      <td>NNW</td>\n",
       "      <td>...</td>\n",
       "      <td>1007.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.2</td>\n",
       "      <td>24.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>12.9</td>\n",
       "      <td>25.7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WSW</td>\n",
       "      <td>46.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>1008.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>23.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>9.2</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NE</td>\n",
       "      <td>24.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>1012.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.1</td>\n",
       "      <td>26.5</td>\n",
       "      <td>No</td>\n",
       "      <td>1.0</td>\n",
       "      <td>No</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>17.5</td>\n",
       "      <td>32.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>29.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.2</td>\n",
       "      <td>No</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141474</th>\n",
       "      <td>2015-06-26</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>3.8</td>\n",
       "      <td>18.3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>E</td>\n",
       "      <td>39.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>1027.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.8</td>\n",
       "      <td>17.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141475</th>\n",
       "      <td>2015-06-27</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>2.5</td>\n",
       "      <td>17.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>E</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>1026.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.0</td>\n",
       "      <td>15.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141476</th>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>4.5</td>\n",
       "      <td>19.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ENE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>1025.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.9</td>\n",
       "      <td>18.0</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141477</th>\n",
       "      <td>2015-06-29</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>7.6</td>\n",
       "      <td>22.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>33.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>1023.8</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11.7</td>\n",
       "      <td>21.5</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141478</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>6.8</td>\n",
       "      <td>21.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>1025.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.6</td>\n",
       "      <td>20.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>107502 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Date Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "0      2008-12-01   Albury     13.4     22.9       0.6          NaN       NaN   \n",
       "1      2008-12-02   Albury      7.4     25.1       0.0          NaN       NaN   \n",
       "2      2008-12-03   Albury     12.9     25.7       0.0          NaN       NaN   \n",
       "3      2008-12-04   Albury      9.2     28.0       0.0          NaN       NaN   \n",
       "4      2008-12-05   Albury     17.5     32.3       1.0          NaN       NaN   \n",
       "...           ...      ...      ...      ...       ...          ...       ...   \n",
       "141474 2015-06-26    Uluru      3.8     18.3       0.0          NaN       NaN   \n",
       "141475 2015-06-27    Uluru      2.5     17.1       0.0          NaN       NaN   \n",
       "141476 2015-06-28    Uluru      4.5     19.6       0.0          NaN       NaN   \n",
       "141477 2015-06-29    Uluru      7.6     22.0       0.0          NaN       NaN   \n",
       "141478 2015-06-30    Uluru      6.8     21.1       0.0          NaN       NaN   \n",
       "\n",
       "       WindGustDir  WindGustSpeed WindDir9am  ... Pressure3pm  Cloud9am  \\\n",
       "0                W           44.0          W  ...      1007.1       8.0   \n",
       "1              WNW           44.0        NNW  ...      1007.8       NaN   \n",
       "2              WSW           46.0          W  ...      1008.7       NaN   \n",
       "3               NE           24.0         SE  ...      1012.8       NaN   \n",
       "4                W           41.0        ENE  ...      1006.0       7.0   \n",
       "...            ...            ...        ...  ...         ...       ...   \n",
       "141474           E           39.0        ESE  ...      1027.6       NaN   \n",
       "141475           E           41.0        ESE  ...      1026.0       NaN   \n",
       "141476         ENE           35.0        ESE  ...      1025.0       NaN   \n",
       "141477         ESE           33.0         SE  ...      1023.8       6.0   \n",
       "141478         ESE           35.0        ESE  ...      1025.2       3.0   \n",
       "\n",
       "        Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  RainTomorrow  Month  \\\n",
       "0            NaN     16.9     21.8         No      0.0            No     12   \n",
       "1            NaN     17.2     24.3         No      0.0            No     12   \n",
       "2            2.0     21.0     23.2         No      0.0            No     12   \n",
       "3            NaN     18.1     26.5         No      1.0            No     12   \n",
       "4            8.0     17.8     29.7         No      0.2            No     12   \n",
       "...          ...      ...      ...        ...      ...           ...    ...   \n",
       "141474       NaN      8.8     17.2         No      0.0            No      6   \n",
       "141475       NaN      7.0     15.7         No      0.0            No      6   \n",
       "141476       3.0      8.9     18.0         No      0.0            No      6   \n",
       "141477       7.0     11.7     21.5         No      0.0            No      6   \n",
       "141478       NaN     10.6     20.2         No      0.0            No      6   \n",
       "\n",
       "        Winter  \n",
       "0        False  \n",
       "1        False  \n",
       "2        False  \n",
       "3        False  \n",
       "4        False  \n",
       "...        ...  \n",
       "141474    True  \n",
       "141475    True  \n",
       "141476    True  \n",
       "141477    True  \n",
       "141478    True  \n",
       "\n",
       "[107502 rows x 26 columns]"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features + [\"Winter\"], \n",
    "        categorical_features, \n",
    "        drop_features + [\"Month\"])\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8501516250860449"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8441382491136029"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Humidity3pm</th>\n",
       "      <td>1.245991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_?</th>\n",
       "      <td>0.930216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure9am</th>\n",
       "      <td>0.854104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Witchcliffe</th>\n",
       "      <td>0.732694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <td>0.716847</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Wollongong</th>\n",
       "      <td>-0.748579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Townsville</th>\n",
       "      <td>-0.760306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Katherine</th>\n",
       "      <td>-0.768667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_MountGinini</th>\n",
       "      <td>-0.905676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure3pm</th>\n",
       "      <td>-1.212546</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>120 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                          Coef\n",
       "Humidity3pm           1.245991\n",
       "RainToday_?           0.930216\n",
       "Pressure9am           0.854104\n",
       "Location_Witchcliffe  0.732694\n",
       "WindGustSpeed         0.716847\n",
       "...                        ...\n",
       "Location_Wollongong  -0.748579\n",
       "Location_Townsville  -0.760306\n",
       "Location_Katherine   -0.768667\n",
       "Location_MountGinini -0.905676\n",
       "Pressure3pm          -1.212546\n",
       "\n",
       "[120 rows x 1 columns]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.sort_values(by=\"Coef\", ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Coef    0.03719\n",
       "Name: Winter, dtype: float64"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef.loc[\"Winter\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- It's a bit surprising that these features don't help much.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAENCAYAAADHbvgVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABAqklEQVR4nO2dd7gcZfXHPyc9EQIEAkIoCSAgHYwCKiiIgpQoTQQBKYoixR8oGgQkoYp0wQhICU06QUIkQOgkAXKTQEJ6uwkh5d70ntxyfn+8szd7987uzu7O7MzenM/zzLO7M+/MfHfKe95y3vOKqmIYhmEYYdAmbgGGYRhG68GMimEYhhEaZlQMwzCM0DCjYhiGYYSGGRXDMAwjNMyoGIZhGKHRLm4BcbPNNttoz54945ZhGIZRMYwePXqRqnb327bJG5WePXtSVVUVtwzDMIyKQURmZ9tmzV+GYRhGaJhRMQzDMELDjIphGIYRGmZUDMMwjNAwo2IYhmGEhhkVIxYaGpWGRouQbRitjU3epdiIh72ufY1tN+/E8L5HxS3FCIEVK1ZQU1NDXV1d3FKMEmjfvj3bbrstXbt2LfoYZlSMWKhrUL5ctjZuGaHw6rh5HLFHd7p2ah+3lFhYsWIFCxcupEePHnTu3BkRiVuSUQSqytq1a/nyyy8BijYs1vxlGCUwo3YVl/xnLFc8+1ncUmKjpqaGHj160KVLFzMoFYyI0KVLF3r06EFNTU3RxzGjYhglsHZDAwDzWkmtqxjq6uro3Llz3DKMkOjcuXNJzZhmVAzDKBmrobQeSr2XZlQMwzCM0DCjYhiGYYSGGRXDMIwMBg4ciIg0LR06dGC33XbjL3/5C+vWrSv4eD179uTcc88tSsvkyZM56qij6Nq1KyLCyy+/HHjfc889l/SpPaqrqxERBg4cWJSWIJhLsWEYRhaef/55dtxxR1auXMmgQYO45ZZbWLlyJffee29Bxxk0aFDRLrpXXHEFM2fO5LnnnmPLLbdkzz33LOo45cKMimGEgPVTt04OPPBAdt99dwB++MMfMm3aNB5++GHuuece2rQJ3tBz0EEHFa1h0qRJHHHEERx77LFFH6OcWPOXYRhGQA4++GDWrl3LokWLAHjjjTc47rjj2H777enSpQv77rsvd9xxBw0NDc32y2z+SjWvffTRR/ziF7+ga9eu7LDDDlx22WVNzWvvvvsuIkJ1dTVPPPFEU1McwPTp0zn77LPp1asXnTt3Ztddd+Wiiy5i6dKl5bkQObCaimEYRkCqq6vZYost2HrrrQGYOXMmP/jBD7j00kvp1KkTVVVV9OvXj9raWv72t7/lPd7ZZ5/NGWecwUsvvcTIkSPp168fW221Ff379+fggw9m5MiR9OnTh29+85tce+21TfvNmzePHXfckbvvvputttqKmTNncvPNN3PccccxcuTIyP5/EMyoGIYROv0HT2DivBWxath7h65cd+I+JR2joaGB+vr6pj6VF198kbvvvpu2bdsC8Nvf/rYprapy+OGHs2HDBm6//XZuvvnmvE1kZ555Jv379wfg6KOP5uOPP+bpp5+mf//+dO3alUMPPZQOHTrQvXt3Dj300Kb9jjjiCI444oim39/+9rfZfffdOfzwwxk7dmxJzW2lYkbFMAwjC3vttVez37/73e+45JJLmn7Pnz+ffv36MXToUObNm0d9fX3TtpqaGr761a/mPP7xxx/f7Pd+++3HsGHD8upKGa7HH3+c2bNnN/NImzJlihkVw6hU1KL3+1JqDSEpDBo0iB133JHa2lruvPNOBgwYwCGHHMI555xDY2Mjffr0Yd68efTr14+99tqLzp078/LLL3PTTTcFcj3u1q1bs98dO3Zk/fr1efe76qqruPfee/nrX//Kt7/9bTbffHPmzp3LySefXJTLc5iYUTGMEDDvr9bJvvvu2+T9ddRRR7H//vtz5ZVXcsoppzBv3jyqqqp44oknOOuss5r2GTx4cOS6nnnmGc455xyuueaapnWrVq2K/LxBMO8vwzCMAHTs2JHbbruNmpoaBgwYwJo1awA3B0mKuro6nnrqqci1rFmzptl5AR599NHIzxsEq6kYhmEEJOWJdfvtt3PhhReyyy67cPXVV9O2bVvat2/PXXfdVRYdxx57LI899hj77bcfu+++Oy+99BIjRowoy7nzYTUVwzCMArjxxhupqanhkUce4eWXX+arX/0q55xzDhdffDFHHHEEffv2jVzDvffeS58+fbj66qs5/fTTWblyJU8//XTk5w2C6Cbe09i7d2+tqqqKW8YmR8++QwCo/tvxeVImm/Fzl3PifR+yb4+uvHrp4XHLiYVJkybx9a9/PW4ZRojku6ciMlpVe/tts5qKYRiGERpmVAyjBJRNu6ZvGJmYUTGM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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_train.plot(x=\"Date\", y=\"Rainfall\");\n",
    "plt.ylabel(\"Rainfall (mm)\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "monthly_avg_rainfall = df_train.groupby(\"Month\")[\"Rainfall\"].mean()\n",
    "plt.plot(monthly_avg_rainfall);\n",
    "plt.xticks(np.arange(1,13).astype(int));\n",
    "plt.ylabel(\"Avg rainfall (mm)\");\n",
    "plt.xlabel(\"Month\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "      <th>Month</th>\n",
       "      <th>Winter</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>141478</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>6.8</td>\n",
       "      <td>21.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>1025.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.6</td>\n",
       "      <td>20.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>138387</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Darwin</td>\n",
       "      <td>18.3</td>\n",
       "      <td>32.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>37.0</td>\n",
       "      <td>E</td>\n",
       "      <td>...</td>\n",
       "      <td>1013.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>31.6</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96224</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Adelaide</td>\n",
       "      <td>7.2</td>\n",
       "      <td>13.8</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>SW</td>\n",
       "      <td>17.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>1029.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.1</td>\n",
       "      <td>12.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55977</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Ballarat</td>\n",
       "      <td>-0.3</td>\n",
       "      <td>10.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "      <td>26.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>1027.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.0</td>\n",
       "      <td>4.7</td>\n",
       "      <td>9.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.4</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93135</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Townsville</td>\n",
       "      <td>20.0</td>\n",
       "      <td>27.4</td>\n",
       "      <td>0.4</td>\n",
       "      <td>6.6</td>\n",
       "      <td>4.6</td>\n",
       "      <td>SE</td>\n",
       "      <td>46.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>1019.2</td>\n",
       "      <td>7.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>23.5</td>\n",
       "      <td>26.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>6</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44355</th>\n",
       "      <td>2007-11-05</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>7.6</td>\n",
       "      <td>16.1</td>\n",
       "      <td>2.8</td>\n",
       "      <td>5.6</td>\n",
       "      <td>10.6</td>\n",
       "      <td>SSE</td>\n",
       "      <td>50.0</td>\n",
       "      <td>SSE</td>\n",
       "      <td>...</td>\n",
       "      <td>1018.5</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11.1</td>\n",
       "      <td>15.4</td>\n",
       "      <td>Yes</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44354</th>\n",
       "      <td>2007-11-04</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>13.3</td>\n",
       "      <td>15.5</td>\n",
       "      <td>39.8</td>\n",
       "      <td>7.2</td>\n",
       "      <td>9.1</td>\n",
       "      <td>NW</td>\n",
       "      <td>54.0</td>\n",
       "      <td>WNW</td>\n",
       "      <td>...</td>\n",
       "      <td>1007.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>13.5</td>\n",
       "      <td>14.1</td>\n",
       "      <td>Yes</td>\n",
       "      <td>2.8</td>\n",
       "      <td>Yes</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44353</th>\n",
       "      <td>2007-11-03</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>13.7</td>\n",
       "      <td>23.4</td>\n",
       "      <td>3.6</td>\n",
       "      <td>5.8</td>\n",
       "      <td>3.3</td>\n",
       "      <td>NW</td>\n",
       "      <td>85.0</td>\n",
       "      <td>N</td>\n",
       "      <td>...</td>\n",
       "      <td>1007.2</td>\n",
       "      <td>8.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>15.4</td>\n",
       "      <td>20.2</td>\n",
       "      <td>Yes</td>\n",
       "      <td>39.8</td>\n",
       "      <td>Yes</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44352</th>\n",
       "      <td>2007-11-02</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>14.0</td>\n",
       "      <td>26.9</td>\n",
       "      <td>3.6</td>\n",
       "      <td>4.4</td>\n",
       "      <td>9.7</td>\n",
       "      <td>ENE</td>\n",
       "      <td>39.0</td>\n",
       "      <td>E</td>\n",
       "      <td>...</td>\n",
       "      <td>1008.4</td>\n",
       "      <td>5.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>17.5</td>\n",
       "      <td>25.7</td>\n",
       "      <td>Yes</td>\n",
       "      <td>3.6</td>\n",
       "      <td>Yes</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44351</th>\n",
       "      <td>2007-11-01</td>\n",
       "      <td>Canberra</td>\n",
       "      <td>8.0</td>\n",
       "      <td>24.3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.4</td>\n",
       "      <td>6.3</td>\n",
       "      <td>NW</td>\n",
       "      <td>30.0</td>\n",
       "      <td>SW</td>\n",
       "      <td>...</td>\n",
       "      <td>1015.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>14.4</td>\n",
       "      <td>23.6</td>\n",
       "      <td>No</td>\n",
       "      <td>3.6</td>\n",
       "      <td>Yes</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>107502 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Date    Location  MinTemp  MaxTemp  Rainfall  Evaporation  \\\n",
       "141478 2015-06-30       Uluru      6.8     21.1       0.0          NaN   \n",
       "138387 2015-06-30      Darwin     18.3     32.6       0.0          6.0   \n",
       "96224  2015-06-30    Adelaide      7.2     13.8       0.0          NaN   \n",
       "55977  2015-06-30    Ballarat     -0.3     10.5       0.0          NaN   \n",
       "93135  2015-06-30  Townsville     20.0     27.4       0.4          6.6   \n",
       "...           ...         ...      ...      ...       ...          ...   \n",
       "44355  2007-11-05    Canberra      7.6     16.1       2.8          5.6   \n",
       "44354  2007-11-04    Canberra     13.3     15.5      39.8          7.2   \n",
       "44353  2007-11-03    Canberra     13.7     23.4       3.6          5.8   \n",
       "44352  2007-11-02    Canberra     14.0     26.9       3.6          4.4   \n",
       "44351  2007-11-01    Canberra      8.0     24.3       0.0          3.4   \n",
       "\n",
       "        Sunshine WindGustDir  WindGustSpeed WindDir9am  ... Pressure3pm  \\\n",
       "141478       NaN         ESE           35.0        ESE  ...      1025.2   \n",
       "138387      11.0         ESE           37.0          E  ...      1013.3   \n",
       "96224        NaN          SW           17.0        ENE  ...      1029.5   \n",
       "55977        NaN           S           26.0        NaN  ...      1027.7   \n",
       "93135        4.6          SE           46.0         SE  ...      1019.2   \n",
       "...          ...         ...            ...        ...  ...         ...   \n",
       "44355       10.6         SSE           50.0        SSE  ...      1018.5   \n",
       "44354        9.1          NW           54.0        WNW  ...      1007.0   \n",
       "44353        3.3          NW           85.0          N  ...      1007.2   \n",
       "44352        9.7         ENE           39.0          E  ...      1008.4   \n",
       "44351        6.3          NW           30.0         SW  ...      1015.0   \n",
       "\n",
       "        Cloud9am  Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  \\\n",
       "141478       3.0       NaN     10.6     20.2         No      0.0   \n",
       "138387       1.0       1.0     24.0     31.6         No      0.0   \n",
       "96224        NaN       NaN     10.1     12.7         No      0.0   \n",
       "55977        NaN       8.0      4.7      9.3         No      0.4   \n",
       "93135        7.0       6.0     23.5     26.2         No      0.0   \n",
       "...          ...       ...      ...      ...        ...      ...   \n",
       "44355        7.0       7.0     11.1     15.4        Yes      0.0   \n",
       "44354        2.0       7.0     13.5     14.1        Yes      2.8   \n",
       "44353        8.0       7.0     15.4     20.2        Yes     39.8   \n",
       "44352        5.0       3.0     17.5     25.7        Yes      3.6   \n",
       "44351        7.0       7.0     14.4     23.6         No      3.6   \n",
       "\n",
       "        RainTomorrow  Month  Winter  \n",
       "141478            No      6    True  \n",
       "138387            No      6    True  \n",
       "96224             No      6    True  \n",
       "55977             No      6    True  \n",
       "93135             No      6    True  \n",
       "...              ...    ...     ...  \n",
       "44355             No     11   False  \n",
       "44354            Yes     11   False  \n",
       "44353            Yes     11   False  \n",
       "44352            Yes     11   False  \n",
       "44351            Yes     11   False  \n",
       "\n",
       "[107502 rows x 26 columns]"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.sort_values(by=\"Date\", ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- This pattern is pretty surprising to me - why is June rainy but May and August are less so?\n",
    "- But, Australia is a huge country. Perhaps we should drill down to particular locations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train_canberra  = df_train.query('Location == \"Canberra\"')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(df_train_canberra[\"Date\"], df_train_canberra[\"Rainfall\"]);\n",
    "plt.ylabel(\"Rainfall (mm)\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(df_train_canberra.groupby(\"Month\")[\"Rainfall\"].mean());\n",
    "plt.xticks(np.arange(1,13).astype(int));\n",
    "plt.ylabel(\"Avg rainfall (mm)\");\n",
    "plt.xlabel(\"Month\");\n",
    "plt.title(\"Rainfall in Canberra\");"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2696, 26)"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train_canberra.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- This looks somewhat cleaner but also pretty surprising - why is December so much higher than January?\n",
    "- This is called _seasonality_.\n",
    "- Why was the month feature not that useful? Perhaps this was already captured in the other features.\n",
    "  - But also the encoding wasn't ideal."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Periodic encoding\n",
    "\n",
    "- We can also try a periodic encoding.\n",
    "- This works because we know the periodicity (annual).\n",
    "- We can use a sin and cos with period 1 year.\n",
    "- You can shift the period by adding together $\\sin(x)$ and $\\cos(x)$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "WINTER_MONTHS = {5,6,7,8,9}\n",
    "df_train = df_train.assign(Winter=df_train[\"Month\"].isin(WINTER_MONTHS))\n",
    "df_test  = df_test.assign( Winter=df_test[ \"Month\"].isin(WINTER_MONTHS))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_train.assign(Month_sin = np.sin(2*np.pi*df_train[\"Month\"]/12))\n",
    "df_train = df_train.assign(Month_cos = np.cos(2*np.pi*df_train[\"Month\"]/12))\n",
    "\n",
    "df_test = df_test.assign(Month_sin = np.sin(2*np.pi*df_test[\"Month\"]/12))\n",
    "df_test = df_test.assign(Month_cos = np.cos(2*np.pi*df_test[\"Month\"]/12))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "month = np.arange(1,13)\n",
    "enc_sin = np.sin(2*np.pi*month/12)\n",
    "enc_cos = np.cos(2*np.pi*month/12)\n",
    "plt.plot(month,enc_sin);\n",
    "plt.plot(month,enc_cos, 'r');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features + [\"Month_sin\", \"Month_cos\"], \n",
    "        categorical_features, \n",
    "        drop_features + [\"Month\", \"Winter\"])\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8499097691205745"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8436770343893228"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Month_sin</th>\n",
       "      <td>-0.090787</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Month_cos</th>\n",
       "      <td>-0.127540</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               Coef\n",
       "Month_sin -0.090787\n",
       "Month_cos -0.127540"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.loc[[\"Month_sin\", \"Month_cos\"]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**From Piazza last year**\n",
    "\n",
    "Q: How to interpret coefficients for periodic encoded features?\n",
    "\n",
    "A: They are both negative, so it means the price is higher when sin(2 pi month / 12) is lower and when cos(2 pi month / 12) is lower. In fact, since this is a linear model, we can just combine them: it means the price is higher when -0.016 sin(2 pi month / 12) - 0.013 cos(2 pi month / 12) is high. You can plot this function. I plotted it - see attached image. It shows that the predicted price is higher roughly from months 5-11, meaning May-November, with the lowest price falling around Jan-Feb and the highest price around August.\n",
    "\n",
    "Optional note: by following trigonometric identities, we can see that learning  $A\\sin(x)+B\\cos(x)$  is the same as learning  $C\\sin(x-\\phi)$, or in other words a phase-shifted sine wave. \n",
    "\n",
    "However, all this only applies because it's a linear model. For something like a random forest, these coefficients would be harder to interpret.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Encoding average monthly rainfall "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also try encoding the average rainfall for that month a a feature:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Month\n",
       "1     2.641089\n",
       "2     3.550847\n",
       "3     2.675817\n",
       "4     2.530029\n",
       "5     2.026871\n",
       "6     2.617369\n",
       "7     2.179104\n",
       "8     2.022084\n",
       "9     1.777074\n",
       "10    1.740375\n",
       "11    2.474031\n",
       "12    2.554032\n",
       "Name: Rainfall, dtype: float64"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "monthly_avg_rainfall = df_train.groupby(\"Month\")[\"Rainfall\"].mean()\n",
    "monthly_avg_rainfall"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_train.assign(Monthly_rainfall = df_train[\"Date\"].apply(lambda x: monthly_avg_rainfall[x.month]))\n",
    "df_test = df_test.assign(Monthly_rainfall = df_test[\"Date\"].apply(lambda x: monthly_avg_rainfall[x.month]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features + [\"Monthly_rainfall\"], \n",
    "        categorical_features, \n",
    "        drop_features + [\"Month\", \"Winter\", \"Month_sin\", \"Month_cos\"])\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8500213949507917"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.844484160156813"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Coef   -0.057041\n",
       "Name: Monthly_rainfall, dtype: float64"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.loc[\"Monthly_rainfall\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Hmm, it's a bit worrying that this coefficient is negative...\n",
    "- Unless I have a bug in my code, this is a prime example of the dangers of interpreting coefficients too literally. \n",
    "- If we trained a model with _only_ this feature:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "monthly_rain = df_train[\"Date\"].apply(lambda x: monthly_avg_rainfall[x.month]).values[:,None]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.01646627]])"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr = LogisticRegression(max_iter=1000)\n",
    "lr.fit(monthly_rain, y_train)\n",
    "lr.coef_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Even here we get a negative coefficient, very bizarre.\n",
    "- We'll get a sensible result in a second:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Average monthly rainfall by location"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "avg_monthly_rainfall_by_loc = df_train.groupby([\"Month\", \"Location\"])[\"Rainfall\"].mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_train.assign(Monthly_rainfall_at_loc = df_train.apply(lambda x: avg_monthly_rainfall_by_loc.loc[(x[\"Date\"].month, x[\"Location\"])], axis=1))\n",
    "df_test = df_test.assign(Monthly_rainfall_at_loc = df_test.apply(lambda x: avg_monthly_rainfall_by_loc.loc[(x[\"Date\"].month, x[\"Location\"])], axis=1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features + [\"Monthly_rainfall_at_loc\"], \n",
    "        categorical_features, \n",
    "        drop_features + [\"Month\", \"Winter\", \"Month_sin\", \"Month_cos\", \"Monthly_rainfall\"])\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8508306822198657"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8437058603095904"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Coef    0.216485\n",
       "Name: Monthly_rainfall_at_loc, dtype: float64"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.loc[\"Monthly_rainfall_at_loc\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "At least here we get a positive coefficient\n",
    "\n",
    "![](img/mike_phew.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Break (5 min)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "REMINDER TO RESUME RECORDING"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lag-based features (15 min)\n",
    "\n",
    "- Currently we're using features about today to predict tomorrow's rainfall.\n",
    "- But, what if tomorrow's rainfall is also related to yesterday's features, or the day before?\n",
    "  - This is called a _lagged_ feature.\n",
    "- In time series analysis, we'd look at something called an [autocorrelation function](https://en.wikipedia.org/wiki/Autocorrelation) (ACF), but we won't go into that here.\n",
    "- Instead, we can just add those features:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_rain.query('Date <= 20150630')\n",
    "df_test  = df_rain.query('Date >  20150630')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>Pressure9am</th>\n",
       "      <th>Pressure3pm</th>\n",
       "      <th>Cloud9am</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>13.4</td>\n",
       "      <td>22.9</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>44.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1007.7</td>\n",
       "      <td>1007.1</td>\n",
       "      <td>8.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>7.4</td>\n",
       "      <td>25.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WNW</td>\n",
       "      <td>44.0</td>\n",
       "      <td>NNW</td>\n",
       "      <td>...</td>\n",
       "      <td>25.0</td>\n",
       "      <td>1010.6</td>\n",
       "      <td>1007.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.2</td>\n",
       "      <td>24.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>12.9</td>\n",
       "      <td>25.7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WSW</td>\n",
       "      <td>46.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>30.0</td>\n",
       "      <td>1007.6</td>\n",
       "      <td>1008.7</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>23.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>9.2</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NE</td>\n",
       "      <td>24.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>16.0</td>\n",
       "      <td>1017.6</td>\n",
       "      <td>1012.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.1</td>\n",
       "      <td>26.5</td>\n",
       "      <td>No</td>\n",
       "      <td>1.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>17.5</td>\n",
       "      <td>32.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>33.0</td>\n",
       "      <td>1010.8</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>29.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.2</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141474</th>\n",
       "      <td>2015-06-26</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>3.8</td>\n",
       "      <td>18.3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>E</td>\n",
       "      <td>39.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>37.0</td>\n",
       "      <td>1031.5</td>\n",
       "      <td>1027.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>8.8</td>\n",
       "      <td>17.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141475</th>\n",
       "      <td>2015-06-27</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>2.5</td>\n",
       "      <td>17.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>E</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>40.0</td>\n",
       "      <td>1029.9</td>\n",
       "      <td>1026.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.0</td>\n",
       "      <td>15.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141476</th>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>4.5</td>\n",
       "      <td>19.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ENE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>39.0</td>\n",
       "      <td>1028.7</td>\n",
       "      <td>1025.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.0</td>\n",
       "      <td>8.9</td>\n",
       "      <td>18.0</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141477</th>\n",
       "      <td>2015-06-29</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>7.6</td>\n",
       "      <td>22.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>33.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>37.0</td>\n",
       "      <td>1027.2</td>\n",
       "      <td>1023.8</td>\n",
       "      <td>6.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>11.7</td>\n",
       "      <td>21.5</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141478</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Uluru</td>\n",
       "      <td>6.8</td>\n",
       "      <td>21.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>ESE</td>\n",
       "      <td>35.0</td>\n",
       "      <td>ESE</td>\n",
       "      <td>...</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1028.6</td>\n",
       "      <td>1025.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10.6</td>\n",
       "      <td>20.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>107502 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             Date Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "0      2008-12-01   Albury     13.4     22.9       0.6          NaN       NaN   \n",
       "1      2008-12-02   Albury      7.4     25.1       0.0          NaN       NaN   \n",
       "2      2008-12-03   Albury     12.9     25.7       0.0          NaN       NaN   \n",
       "3      2008-12-04   Albury      9.2     28.0       0.0          NaN       NaN   \n",
       "4      2008-12-05   Albury     17.5     32.3       1.0          NaN       NaN   \n",
       "...           ...      ...      ...      ...       ...          ...       ...   \n",
       "141474 2015-06-26    Uluru      3.8     18.3       0.0          NaN       NaN   \n",
       "141475 2015-06-27    Uluru      2.5     17.1       0.0          NaN       NaN   \n",
       "141476 2015-06-28    Uluru      4.5     19.6       0.0          NaN       NaN   \n",
       "141477 2015-06-29    Uluru      7.6     22.0       0.0          NaN       NaN   \n",
       "141478 2015-06-30    Uluru      6.8     21.1       0.0          NaN       NaN   \n",
       "\n",
       "       WindGustDir  WindGustSpeed WindDir9am  ... Humidity3pm  Pressure9am  \\\n",
       "0                W           44.0          W  ...        22.0       1007.7   \n",
       "1              WNW           44.0        NNW  ...        25.0       1010.6   \n",
       "2              WSW           46.0          W  ...        30.0       1007.6   \n",
       "3               NE           24.0         SE  ...        16.0       1017.6   \n",
       "4                W           41.0        ENE  ...        33.0       1010.8   \n",
       "...            ...            ...        ...  ...         ...          ...   \n",
       "141474           E           39.0        ESE  ...        37.0       1031.5   \n",
       "141475           E           41.0        ESE  ...        40.0       1029.9   \n",
       "141476         ENE           35.0        ESE  ...        39.0       1028.7   \n",
       "141477         ESE           33.0         SE  ...        37.0       1027.2   \n",
       "141478         ESE           35.0        ESE  ...        35.0       1028.6   \n",
       "\n",
       "        Pressure3pm  Cloud9am  Cloud3pm  Temp9am  Temp3pm  RainToday  RISK_MM  \\\n",
       "0            1007.1       8.0       NaN     16.9     21.8         No      0.0   \n",
       "1            1007.8       NaN       NaN     17.2     24.3         No      0.0   \n",
       "2            1008.7       NaN       2.0     21.0     23.2         No      0.0   \n",
       "3            1012.8       NaN       NaN     18.1     26.5         No      1.0   \n",
       "4            1006.0       7.0       8.0     17.8     29.7         No      0.2   \n",
       "...             ...       ...       ...      ...      ...        ...      ...   \n",
       "141474       1027.6       NaN       NaN      8.8     17.2         No      0.0   \n",
       "141475       1026.0       NaN       NaN      7.0     15.7         No      0.0   \n",
       "141476       1025.0       NaN       3.0      8.9     18.0         No      0.0   \n",
       "141477       1023.8       6.0       7.0     11.7     21.5         No      0.0   \n",
       "141478       1025.2       3.0       NaN     10.6     20.2         No      0.0   \n",
       "\n",
       "        RainTomorrow  \n",
       "0                 No  \n",
       "1                 No  \n",
       "2                 No  \n",
       "3                 No  \n",
       "4                 No  \n",
       "...              ...  \n",
       "141474            No  \n",
       "141475            No  \n",
       "141476            No  \n",
       "141477            No  \n",
       "141478            No  \n",
       "\n",
       "[107502 rows x 24 columns]"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- It looks like the dataframe is already sorted by Location and then by date for each Location.\n",
    "- We could have done this ourselves with"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# df_train.sort_values(by=[\"Location\", \"Date\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But make sure to also sort the targets (i.e. do this before preprocessing)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_lag_feature(df, orig_feature, lag):\n",
    "    \"\"\"Creates a new df with a new feature that's a lagged version of the original, where lag is an int.\"\"\"\n",
    "    # note: pandas .shift() kind of does this for you already, but oh well I already wrote this code\n",
    "    \n",
    "    new_df = df.copy()\n",
    "    new_feature_name = \"%s_lag%d\" % (orig_feature, lag)\n",
    "    new_df[new_feature_name] = np.nan\n",
    "    for location, df_location in new_df.groupby(\"Location\"): # Each location is its own time series\n",
    "        new_df.loc[df_location.index[lag:],new_feature_name] = df_location.iloc[:-lag][orig_feature].values\n",
    "    return new_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = create_lag_feature(df_train, \"Rainfall\", 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Rainfall_lag1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2008-12-06</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2008-12-07</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2008-12-08</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2008-12-09</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2008-12-10</td>\n",
       "      <td>Albury</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2008-12-11</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2008-12-12</td>\n",
       "      <td>Albury</td>\n",
       "      <td>2.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2008-12-13</td>\n",
       "      <td>Albury</td>\n",
       "      <td>15.6</td>\n",
       "      <td>2.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2008-12-14</td>\n",
       "      <td>Albury</td>\n",
       "      <td>3.6</td>\n",
       "      <td>15.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2008-12-16</td>\n",
       "      <td>Albury</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2008-12-17</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2008-12-18</td>\n",
       "      <td>Albury</td>\n",
       "      <td>16.8</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2008-12-19</td>\n",
       "      <td>Albury</td>\n",
       "      <td>10.6</td>\n",
       "      <td>16.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2008-12-20</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2008-12-21</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Date Location  Rainfall  Rainfall_lag1\n",
       "0  2008-12-01   Albury       0.6            NaN\n",
       "1  2008-12-02   Albury       0.0            0.6\n",
       "2  2008-12-03   Albury       0.0            0.0\n",
       "3  2008-12-04   Albury       0.0            0.0\n",
       "4  2008-12-05   Albury       1.0            0.0\n",
       "5  2008-12-06   Albury       0.2            1.0\n",
       "6  2008-12-07   Albury       0.0            0.2\n",
       "7  2008-12-08   Albury       0.0            0.0\n",
       "8  2008-12-09   Albury       0.0            0.0\n",
       "9  2008-12-10   Albury       1.4            0.0\n",
       "10 2008-12-11   Albury       0.0            1.4\n",
       "11 2008-12-12   Albury       2.2            0.0\n",
       "12 2008-12-13   Albury      15.6            2.2\n",
       "13 2008-12-14   Albury       3.6           15.6\n",
       "14 2008-12-16   Albury       NaN            3.6\n",
       "15 2008-12-17   Albury       0.0            NaN\n",
       "16 2008-12-18   Albury      16.8            0.0\n",
       "17 2008-12-19   Albury      10.6           16.8\n",
       "18 2008-12-20   Albury       0.0           10.6\n",
       "19 2008-12-21   Albury       0.0            0.0"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train[[\"Date\", \"Location\", \"Rainfall\", \"Rainfall_lag1\"]].head(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Rainfall_lag1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2285</th>\n",
       "      <td>2015-06-26</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2286</th>\n",
       "      <td>2015-06-27</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2287</th>\n",
       "      <td>2015-06-28</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2288</th>\n",
       "      <td>2015-06-29</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2289</th>\n",
       "      <td>2015-06-30</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3011</th>\n",
       "      <td>2009-01-01</td>\n",
       "      <td>BadgerysCreek</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3012</th>\n",
       "      <td>2009-01-02</td>\n",
       "      <td>BadgerysCreek</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3013</th>\n",
       "      <td>2009-01-03</td>\n",
       "      <td>BadgerysCreek</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3014</th>\n",
       "      <td>2009-01-04</td>\n",
       "      <td>BadgerysCreek</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3015</th>\n",
       "      <td>2009-01-05</td>\n",
       "      <td>BadgerysCreek</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Date       Location  Rainfall  Rainfall_lag1\n",
       "2285 2015-06-26         Albury       0.2            1.0\n",
       "2286 2015-06-27         Albury       0.0            0.2\n",
       "2287 2015-06-28         Albury       0.2            0.0\n",
       "2288 2015-06-29         Albury       0.0            0.2\n",
       "2289 2015-06-30         Albury       0.0            0.0\n",
       "3011 2009-01-01  BadgerysCreek       0.0            NaN\n",
       "3012 2009-01-02  BadgerysCreek       0.0            0.0\n",
       "3013 2009-01-03  BadgerysCreek       0.0            0.0\n",
       "3014 2009-01-04  BadgerysCreek       0.0            0.0\n",
       "3015 2009-01-05  BadgerysCreek       0.0            0.0"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train[[\"Date\", \"Location\", \"Rainfall\", \"Rainfall_lag1\"]][2285:2295]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Looks good."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Question: is it OK to do this to the test set? Discuss.\n",
    "\n",
    "<br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- It's fine if you would have this information available in deployment.\n",
    "- If we're just forecasting the next day, we should.\n",
    "- Let's include it for now."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another question: is there a difference between doing this and then splitting, vs. splitting and then doing this?\n",
    "\n",
    "<br><br><br><br><br><br>\n",
    "\n",
    "- Answer: a tiny difference: the first day of the test set, for each location, will have a `NaN`. \n",
    "  - That might actually be too strict.\n",
    "  - It should be fine to do this before splitting."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_rain_modified = create_lag_feature(df_rain, \"Rainfall\", 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_rain_modified.query('Date <= 20150630')\n",
    "df_test  = df_rain_modified.query('Date >  20150630')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features + [\"Rainfall_lag1\"], \n",
    "        categorical_features, \n",
    "        drop_features)\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8502260423061897"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.844426508316278"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Humidity3pm</th>\n",
       "      <td>1.242542</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_?</th>\n",
       "      <td>0.918470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure9am</th>\n",
       "      <td>0.866227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Witchcliffe</th>\n",
       "      <td>0.728622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <td>0.720533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_No</th>\n",
       "      <td>-0.722207</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Katherine</th>\n",
       "      <td>-0.728617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Wollongong</th>\n",
       "      <td>-0.749250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_MountGinini</th>\n",
       "      <td>-0.965463</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure3pm</th>\n",
       "      <td>-1.222190</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>120 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                          Coef\n",
       "Humidity3pm           1.242542\n",
       "RainToday_?           0.918470\n",
       "Pressure9am           0.866227\n",
       "Location_Witchcliffe  0.728622\n",
       "WindGustSpeed         0.720533\n",
       "...                        ...\n",
       "RainToday_No         -0.722207\n",
       "Location_Katherine   -0.728617\n",
       "Location_Wollongong  -0.749250\n",
       "Location_MountGinini -0.965463\n",
       "Pressure3pm          -1.222190\n",
       "\n",
       "[120 rows x 1 columns]"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.sort_values(by=\"Coef\", ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Rainfall</th>\n",
       "      <td>0.081072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rainfall_lag1</th>\n",
       "      <td>0.008303</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   Coef\n",
       "Rainfall       0.081072\n",
       "Rainfall_lag1  0.008303"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef.loc[[\"Rainfall\", \"Rainfall_lag1\"]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- We could also create a lagged version of the target.\n",
    "- In fact, this dataset already has that built in! `RainToday` is the lagged version of the target `RainTomorrow`.\n",
    "- We could also created lagged version of other features, or more lags"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_rain_modified = create_lag_feature(df_rain, \"Rainfall\", 1)\n",
    "df_rain_modified = create_lag_feature(df_rain_modified, \"Rainfall\", 2)\n",
    "df_rain_modified = create_lag_feature(df_rain_modified, \"Rainfall\", 3)\n",
    "df_rain_modified = create_lag_feature(df_rain_modified, \"Humidity3pm\", 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Rainfall_lag1</th>\n",
       "      <th>Rainfall_lag2</th>\n",
       "      <th>Rainfall_lag3</th>\n",
       "      <th>Humidity3pm</th>\n",
       "      <th>Humidity3pm_lag1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>25.0</td>\n",
       "      <td>22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>30.0</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>16.0</td>\n",
       "      <td>30.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2008-12-06</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>33.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2008-12-07</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>23.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2008-12-08</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>1.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2008-12-09</td>\n",
       "      <td>Albury</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.2</td>\n",
       "      <td>9.0</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2008-12-10</td>\n",
       "      <td>Albury</td>\n",
       "      <td>1.4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Date Location  Rainfall  Rainfall_lag1  Rainfall_lag2  Rainfall_lag3  \\\n",
       "0 2008-12-01   Albury       0.6            NaN            NaN            NaN   \n",
       "1 2008-12-02   Albury       0.0            0.6            NaN            NaN   \n",
       "2 2008-12-03   Albury       0.0            0.0            0.6            NaN   \n",
       "3 2008-12-04   Albury       0.0            0.0            0.0            0.6   \n",
       "4 2008-12-05   Albury       1.0            0.0            0.0            0.0   \n",
       "5 2008-12-06   Albury       0.2            1.0            0.0            0.0   \n",
       "6 2008-12-07   Albury       0.0            0.2            1.0            0.0   \n",
       "7 2008-12-08   Albury       0.0            0.0            0.2            1.0   \n",
       "8 2008-12-09   Albury       0.0            0.0            0.0            0.2   \n",
       "9 2008-12-10   Albury       1.4            0.0            0.0            0.0   \n",
       "\n",
       "   Humidity3pm  Humidity3pm_lag1  \n",
       "0         22.0               NaN  \n",
       "1         25.0              22.0  \n",
       "2         30.0              25.0  \n",
       "3         16.0              30.0  \n",
       "4         33.0              16.0  \n",
       "5         23.0              33.0  \n",
       "6         19.0              23.0  \n",
       "7         19.0              19.0  \n",
       "8          9.0              19.0  \n",
       "9         27.0               9.0  "
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rain_modified[['Date', 'Location', 'Rainfall', 'Rainfall_lag1', 'Rainfall_lag2', 'Rainfall_lag3', 'Humidity3pm', 'Humidity3pm_lag1']].head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note the pattern of `NaN` values. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_train = df_rain_modified.query('Date <= 20150630')\n",
    "df_test  = df_rain_modified.query('Date >  20150630')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_enc, y_train, X_test_enc, y_test, preprocessor = preprocess_features(df_train, df_test, \n",
    "        numeric_features + ['Rainfall_lag1', 'Rainfall_lag2', 'Rainfall_lag3', 'Humidity3pm_lag1'], \n",
    "        categorical_features, \n",
    "        drop_features)\n",
    "\n",
    "lr_pipe = make_pipeline(preprocessor, LogisticRegression(max_iter=1000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr_pipe.fit(df_train, y_train);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8514818328961322"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8460119339309907"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_pipe.score(df_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Humidity3pm</th>\n",
       "      <td>1.278554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_?</th>\n",
       "      <td>0.903025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure9am</th>\n",
       "      <td>0.895413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Witchcliffe</th>\n",
       "      <td>0.745507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <td>0.706832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Wollongong</th>\n",
       "      <td>-0.641508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_Katherine</th>\n",
       "      <td>-0.747221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>RainToday_No</th>\n",
       "      <td>-0.758927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Location_MountGinini</th>\n",
       "      <td>-0.869530</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pressure3pm</th>\n",
       "      <td>-1.253096</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>123 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                          Coef\n",
       "Humidity3pm           1.278554\n",
       "RainToday_?           0.903025\n",
       "Pressure9am           0.895413\n",
       "Location_Witchcliffe  0.745507\n",
       "WindGustSpeed         0.706832\n",
       "...                        ...\n",
       "Location_Wollongong  -0.641508\n",
       "Location_Katherine   -0.747221\n",
       "RainToday_No         -0.758927\n",
       "Location_MountGinini -0.869530\n",
       "Pressure3pm          -1.253096\n",
       "\n",
       "[123 rows x 1 columns]"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef = pd.DataFrame(data=np.squeeze(lr_pipe[1].coef_), index=X_train_enc.columns, columns=[\"Coef\"])\n",
    "lr_coef.sort_values(by=\"Coef\", ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Rainfall</th>\n",
       "      <td>0.108507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rainfall_lag1</th>\n",
       "      <td>0.023072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rainfall_lag2</th>\n",
       "      <td>0.018276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rainfall_lag3</th>\n",
       "      <td>0.017810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Humidity3pm</th>\n",
       "      <td>1.278554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Humidity3pm_lag1</th>\n",
       "      <td>-0.267483</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      Coef\n",
       "Rainfall          0.108507\n",
       "Rainfall_lag1     0.023072\n",
       "Rainfall_lag2     0.018276\n",
       "Rainfall_lag3     0.017810\n",
       "Humidity3pm       1.278554\n",
       "Humidity3pm_lag1 -0.267483"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_coef.loc[['Rainfall', 'Rainfall_lag1', 'Rainfall_lag2', 'Rainfall_lag3', 'Humidity3pm', 'Humidity3pm_lag1']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Location</th>\n",
       "      <th>MinTemp</th>\n",
       "      <th>MaxTemp</th>\n",
       "      <th>Rainfall</th>\n",
       "      <th>Evaporation</th>\n",
       "      <th>Sunshine</th>\n",
       "      <th>WindGustDir</th>\n",
       "      <th>WindGustSpeed</th>\n",
       "      <th>WindDir9am</th>\n",
       "      <th>...</th>\n",
       "      <th>Cloud3pm</th>\n",
       "      <th>Temp9am</th>\n",
       "      <th>Temp3pm</th>\n",
       "      <th>RainToday</th>\n",
       "      <th>RISK_MM</th>\n",
       "      <th>RainTomorrow</th>\n",
       "      <th>Rainfall_lag1</th>\n",
       "      <th>Rainfall_lag2</th>\n",
       "      <th>Rainfall_lag3</th>\n",
       "      <th>Humidity3pm_lag1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2008-12-01</td>\n",
       "      <td>Albury</td>\n",
       "      <td>13.4</td>\n",
       "      <td>22.9</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>44.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2008-12-02</td>\n",
       "      <td>Albury</td>\n",
       "      <td>7.4</td>\n",
       "      <td>25.1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WNW</td>\n",
       "      <td>44.0</td>\n",
       "      <td>NNW</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>17.2</td>\n",
       "      <td>24.3</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2008-12-03</td>\n",
       "      <td>Albury</td>\n",
       "      <td>12.9</td>\n",
       "      <td>25.7</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>WSW</td>\n",
       "      <td>46.0</td>\n",
       "      <td>W</td>\n",
       "      <td>...</td>\n",
       "      <td>2.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>23.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2008-12-04</td>\n",
       "      <td>Albury</td>\n",
       "      <td>9.2</td>\n",
       "      <td>28.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NE</td>\n",
       "      <td>24.0</td>\n",
       "      <td>SE</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.1</td>\n",
       "      <td>26.5</td>\n",
       "      <td>No</td>\n",
       "      <td>1.0</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>30.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2008-12-05</td>\n",
       "      <td>Albury</td>\n",
       "      <td>17.5</td>\n",
       "      <td>32.3</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>W</td>\n",
       "      <td>41.0</td>\n",
       "      <td>ENE</td>\n",
       "      <td>...</td>\n",
       "      <td>8.0</td>\n",
       "      <td>17.8</td>\n",
       "      <td>29.7</td>\n",
       "      <td>No</td>\n",
       "      <td>0.2</td>\n",
       "      <td>No</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 28 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        Date Location  MinTemp  MaxTemp  Rainfall  Evaporation  Sunshine  \\\n",
       "0 2008-12-01   Albury     13.4     22.9       0.6          NaN       NaN   \n",
       "1 2008-12-02   Albury      7.4     25.1       0.0          NaN       NaN   \n",
       "2 2008-12-03   Albury     12.9     25.7       0.0          NaN       NaN   \n",
       "3 2008-12-04   Albury      9.2     28.0       0.0          NaN       NaN   \n",
       "4 2008-12-05   Albury     17.5     32.3       1.0          NaN       NaN   \n",
       "\n",
       "  WindGustDir  WindGustSpeed WindDir9am  ... Cloud3pm  Temp9am  Temp3pm  \\\n",
       "0           W           44.0          W  ...      NaN     16.9     21.8   \n",
       "1         WNW           44.0        NNW  ...      NaN     17.2     24.3   \n",
       "2         WSW           46.0          W  ...      2.0     21.0     23.2   \n",
       "3          NE           24.0         SE  ...      NaN     18.1     26.5   \n",
       "4           W           41.0        ENE  ...      8.0     17.8     29.7   \n",
       "\n",
       "   RainToday  RISK_MM  RainTomorrow  Rainfall_lag1  Rainfall_lag2  \\\n",
       "0         No      0.0            No            NaN            NaN   \n",
       "1         No      0.0            No            0.6            NaN   \n",
       "2         No      0.0            No            0.0            0.6   \n",
       "3         No      1.0            No            0.0            0.0   \n",
       "4         No      0.2            No            0.0            0.0   \n",
       "\n",
       "   Rainfall_lag3  Humidity3pm_lag1  \n",
       "0            NaN               NaN  \n",
       "1            NaN              22.0  \n",
       "2            NaN              25.0  \n",
       "3            0.6              30.0  \n",
       "4            0.0              16.0  \n",
       "\n",
       "[5 rows x 28 columns]"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Forecasting further into the future (10 min)\n",
    "\n",
    "- Let's say we want to predict 7 days into the future instead of one day.\n",
    "- There are a few main approaches here:\n",
    "\n",
    "1. Train a separate model for each number of days. E.g. one model that predicts RainTomorrow, another model that predicts RainIn2Days, etc. We can build these datasets.\n",
    "2. Use a multi-output model that jointly predicts RainTomorrow, RainIn2Days, etc. However, multi-output models are outside the scope of CPSC 330. \n",
    "3. Use one model and sequentially predict using a `for` loop. However, this requires predicting _all_ features into a model so may not be that useful here.\n",
    "\n",
    "So, I'll recommend Approach 1 to you, even though it's a bit unwieldy. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- To briefly dig into approach 3, this is easier to understand for a univariate (one feature) time series. \n",
    "- To dig into this we'll look at the [Retail Sales of Clothing and Clothing Accessory Stores dataset](https://fred.stlouisfed.org/series/MRTSSM448USN) made available by the Federal Reserve Bank of St. Louis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [],
   "source": [
    "retail_df = pd.read_csv('data/retail_sales_timeseries.csv', parse_dates=[\"DATE\"])\n",
    "retail_df.columns=[\"date\", \"sales\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1992-01-01</td>\n",
       "      <td>6938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1992-02-01</td>\n",
       "      <td>7524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1992-03-01</td>\n",
       "      <td>8475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1992-04-01</td>\n",
       "      <td>9401</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1992-05-01</td>\n",
       "      <td>9558</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        date  sales\n",
       "0 1992-01-01   6938\n",
       "1 1992-02-01   7524\n",
       "2 1992-03-01   8475\n",
       "3 1992-04-01   9401\n",
       "4 1992-05-01   9558"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('1992-01-01 00:00:00')"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_df['date'].min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2020-08-01 00:00:00')"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_df['date'].max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [],
   "source": [
    "retail_df_train = retail_df.query('date <= 20170101')\n",
    "retail_df_test  = retail_df.query('date >  20170101')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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C5x//vk0NTWxcuVK/uIv/oKxMX9k5r/9279x5pln0tzczPLly7nooov4zne+sxS/qsFgMBgMBoPBYAhQWMyZRsNvJzfccAOdnZ185jOfYeXKlfT19fGjH/0Iy7LI5/NMT0/zd3/3d6xZs4axsTFuueUWLrvsMvbu3cvq1atrPu673/1uPv7xj/NXf/VXfOxjH6Ovr4+/+7u/Y+fOndxzzz3E43H+67/+i3e84x28733v47nPfS7ZbJYnnniiqrA0GAwGg8FgMBgMS0OhZJGI16chmqLxFPngbbvYfXJK6xrOWtvB+1989oK/b2RkhAMHDvC9732PG2+80b39Fa94BQCpVIovfvGL7u3lcpnrrruOVatW8bWvfY23ve1toY979OhRPvaxj/H+97+f973vfe7t27dv58orr+S2227j93//97n33ns577zzfMdcf/31C/49DAaDwWAwGAwGw6mRL1l1Z6Gb9tRnICtWrGDr1q28+93v5gtf+AIHDhyoOuab3/wml156KZ2dnSQSCVpbW5mZmWHfvmCCSoU777wTy7J45StfSalUcv+79NJL6ejo4Fe/+hUAF198MY899hhvectb+OlPf0omk1my39VgMBgMBoPBYDBUUyhZFMtWXccapfEUORWFr1EQQnDnnXfygQ98gPe85z2Mjo6yZcsW3vnOd/KmN72J2267jZtuuok/+7M/4/3vfz8rV64kFotx/fXXk8vlaj7u0NAQANu2bQu9f3R0FIBXv/rV5HI5vvSlL3HLLbeQTCa5/vrr+cQnPmGiOwwGg8FgMBgMhiWmbElKljQzjYa52bp1K//5n/+JlJLHH3+cT33qU/zlX/4lmzdv5utf/zrbtm3jK1/5int8sVicd+ZwxYoVANxxxx0sX7685v1CCN7whjfwhje8gfHxce644w7e8Y53cNNNN3H//fcv3i9pMBgMBoPBYDA0GAOTOa7+2M/59puewznrlmlZQ6FkK4z15jSaovEZjhCCCy64gE984hN86UtfYufOnWQyGRIJ/0vj1ltvpVwuz/lYz3/+84nFYhw/fpznP//5df385cuXu8Xi5z73uVP+PQwGg8FgMBgMhqcDfRNZ8iWL3vGM9qLRKI2GmjzxxBO89a1v5aabbmLbtm2Uy2W+8pWvkEgkuPbaa+no6OC73/0ub3vb27jhhht4+OGH+fd//3c6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\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "retail_df_train.plot(x=\"date\", y=\"sales\", figsize=(15,5));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can create a dataset using purely lag features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lag_df(df, lag, cols):\n",
    "    return df.assign(**{f\"{col}-{n}\": df[col].shift(n) for n in range(1, lag + 1) for col in cols})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>sales</th>\n",
       "      <th>sales-1</th>\n",
       "      <th>sales-2</th>\n",
       "      <th>sales-3</th>\n",
       "      <th>sales-4</th>\n",
       "      <th>sales-5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1992-01-01</td>\n",
       "      <td>6938</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1992-02-01</td>\n",
       "      <td>7524</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1992-03-01</td>\n",
       "      <td>8475</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1992-04-01</td>\n",
       "      <td>9401</td>\n",
       "      <td>8475.0</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1992-05-01</td>\n",
       "      <td>9558</td>\n",
       "      <td>9401.0</td>\n",
       "      <td>8475.0</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>2016-09-01</td>\n",
       "      <td>19816</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>21648.0</td>\n",
       "      <td>20412.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>2016-10-01</td>\n",
       "      <td>20544</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>21648.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>2016-11-01</td>\n",
       "      <td>23704</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>2016-12-01</td>\n",
       "      <td>34611</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>300</th>\n",
       "      <td>2017-01-01</td>\n",
       "      <td>15791</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>301 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          date  sales  sales-1  sales-2  sales-3  sales-4  sales-5\n",
       "0   1992-01-01   6938      NaN      NaN      NaN      NaN      NaN\n",
       "1   1992-02-01   7524   6938.0      NaN      NaN      NaN      NaN\n",
       "2   1992-03-01   8475   7524.0   6938.0      NaN      NaN      NaN\n",
       "3   1992-04-01   9401   8475.0   7524.0   6938.0      NaN      NaN\n",
       "4   1992-05-01   9558   9401.0   8475.0   7524.0   6938.0      NaN\n",
       "..         ...    ...      ...      ...      ...      ...      ...\n",
       "296 2016-09-01  19816  22394.0  20676.0  20157.0  21648.0  20412.0\n",
       "297 2016-10-01  20544  19816.0  22394.0  20676.0  20157.0  21648.0\n",
       "298 2016-11-01  23704  20544.0  19816.0  22394.0  20676.0  20157.0\n",
       "299 2016-12-01  34611  23704.0  20544.0  19816.0  22394.0  20676.0\n",
       "300 2017-01-01  15791  34611.0  23704.0  20544.0  19816.0  22394.0\n",
       "\n",
       "[301 rows x 7 columns]"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_lag_5 = lag_df(retail_df, 5, [\"sales\"])\n",
    "retail_train_5 = retail_lag_5.query('date <= 20170101')\n",
    "retail_test_5  = retail_lag_5.query('date >  20170101')\n",
    "retail_train_5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Now, if we drop the \"date\" column we have a target (\"sales\") and 5 features (the previous 5 days of sales).\n",
    "- We need to impute/drop the missing values and then we can fit a model to this. I will just drop for convenience:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sales</th>\n",
       "      <th>sales-1</th>\n",
       "      <th>sales-2</th>\n",
       "      <th>sales-3</th>\n",
       "      <th>sales-4</th>\n",
       "      <th>sales-5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>9182</td>\n",
       "      <td>9558.0</td>\n",
       "      <td>9401.0</td>\n",
       "      <td>8475.0</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>9103</td>\n",
       "      <td>9182.0</td>\n",
       "      <td>9558.0</td>\n",
       "      <td>9401.0</td>\n",
       "      <td>8475.0</td>\n",
       "      <td>7524.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>10513</td>\n",
       "      <td>9103.0</td>\n",
       "      <td>9182.0</td>\n",
       "      <td>9558.0</td>\n",
       "      <td>9401.0</td>\n",
       "      <td>8475.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9573</td>\n",
       "      <td>10513.0</td>\n",
       "      <td>9103.0</td>\n",
       "      <td>9182.0</td>\n",
       "      <td>9558.0</td>\n",
       "      <td>9401.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10254</td>\n",
       "      <td>9573.0</td>\n",
       "      <td>10513.0</td>\n",
       "      <td>9103.0</td>\n",
       "      <td>9182.0</td>\n",
       "      <td>9558.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>19816</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>21648.0</td>\n",
       "      <td>20412.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>20544</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>21648.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>23704</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>34611</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>300</th>\n",
       "      <td>15791</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>296 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     sales  sales-1  sales-2  sales-3  sales-4  sales-5\n",
       "5     9182   9558.0   9401.0   8475.0   7524.0   6938.0\n",
       "6     9103   9182.0   9558.0   9401.0   8475.0   7524.0\n",
       "7    10513   9103.0   9182.0   9558.0   9401.0   8475.0\n",
       "8     9573  10513.0   9103.0   9182.0   9558.0   9401.0\n",
       "9    10254   9573.0  10513.0   9103.0   9182.0   9558.0\n",
       "..     ...      ...      ...      ...      ...      ...\n",
       "296  19816  22394.0  20676.0  20157.0  21648.0  20412.0\n",
       "297  20544  19816.0  22394.0  20676.0  20157.0  21648.0\n",
       "298  23704  20544.0  19816.0  22394.0  20676.0  20157.0\n",
       "299  34611  23704.0  20544.0  19816.0  22394.0  20676.0\n",
       "300  15791  34611.0  23704.0  20544.0  19816.0  22394.0\n",
       "\n",
       "[296 rows x 6 columns]"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_train_5 = retail_train_5[5:].drop(columns=[\"date\"])\n",
    "retail_train_5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [],
   "source": [
    "retail_train_5_X = retail_train_5.drop(columns=[\"sales\"])\n",
    "retail_train_5_y = retail_train_5[\"sales\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [],
   "source": [
    "retail_model = RandomForestRegressor()\n",
    "retail_model.fit(retail_train_5_X, retail_train_5_y);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given this, we can now predict the sales"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([18467.6 , 20499.93, 20832.32, 21975.02, 20478.01, 21715.37,\n",
       "       22137.9 , 27378.72, 21336.06, 22967.41, 29288.32, 16088.3 ,\n",
       "       18441.65, 21964.19, 22129.24, 22035.51, 29124.66, 20128.5 ,\n",
       "       22068.74, 31185.6 , 21982.77, 21840.5 , 18289.57, 16076.64,\n",
       "       18672.95, 20503.22, 21384.15, 21916.12, 28232.72, 21622.19,\n",
       "       21795.75, 31142.77, 21945.5 , 21989.4 , 27653.07, 16070.28,\n",
       "       18978.71, 22361.74, 13334.49, 11690.89, 11271.88, 14551.29,\n",
       "       13598.25])"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds = retail_model.predict(retail_test_5.drop(columns=[\"date\", \"sales\"]))\n",
    "preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>sales</th>\n",
       "      <th>sales-1</th>\n",
       "      <th>sales-2</th>\n",
       "      <th>sales-3</th>\n",
       "      <th>sales-4</th>\n",
       "      <th>sales-5</th>\n",
       "      <th>predicted_sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>301</th>\n",
       "      <td>2017-02-01</td>\n",
       "      <td>17900</td>\n",
       "      <td>15791.0</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>18467.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>302</th>\n",
       "      <td>2017-03-01</td>\n",
       "      <td>21217</td>\n",
       "      <td>17900.0</td>\n",
       "      <td>15791.0</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>20499.93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>303</th>\n",
       "      <td>2017-04-01</td>\n",
       "      <td>21052</td>\n",
       "      <td>21217.0</td>\n",
       "      <td>17900.0</td>\n",
       "      <td>15791.0</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20832.32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>304</th>\n",
       "      <td>2017-05-01</td>\n",
       "      <td>21831</td>\n",
       "      <td>21052.0</td>\n",
       "      <td>21217.0</td>\n",
       "      <td>17900.0</td>\n",
       "      <td>15791.0</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>21975.02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>2017-06-01</td>\n",
       "      <td>20527</td>\n",
       "      <td>21831.0</td>\n",
       "      <td>21052.0</td>\n",
       "      <td>21217.0</td>\n",
       "      <td>17900.0</td>\n",
       "      <td>15791.0</td>\n",
       "      <td>20478.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          date  sales  sales-1  sales-2  sales-3  sales-4  sales-5  \\\n",
       "301 2017-02-01  17900  15791.0  34611.0  23704.0  20544.0  19816.0   \n",
       "302 2017-03-01  21217  17900.0  15791.0  34611.0  23704.0  20544.0   \n",
       "303 2017-04-01  21052  21217.0  17900.0  15791.0  34611.0  23704.0   \n",
       "304 2017-05-01  21831  21052.0  21217.0  17900.0  15791.0  34611.0   \n",
       "305 2017-06-01  20527  21831.0  21052.0  21217.0  17900.0  15791.0   \n",
       "\n",
       "     predicted_sales  \n",
       "301         18467.60  \n",
       "302         20499.93  \n",
       "303         20832.32  \n",
       "304         21975.02  \n",
       "305         20478.01  "
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_test_5_preds = retail_test_5.assign(predicted_sales = preds)\n",
    "retail_test_5_preds.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Ok, that is fine, but what if we want to predict 7 days in the future? \n",
    "- Well, we would not have access to our features!! We don't yet know the previous day's sales, or 2 days prior! \n",
    "- So we can use \"Approach 3\" mentioned earlier: predict these values and then pretend they are true!\n",
    "- For simplicity, say today is Monday\n",
    "\n",
    "1. Predict Tuesday's sales\n",
    "2. Then, to predict for Wednesday, we need to know Tuesday's sales. Use our _prediction_ for Tuesday as the truth.\n",
    "3. Then, to predict for Thursday, we need to know Tue and Wed sales. Use our predictions.\n",
    "4. Etc etc."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's take a look at [Tom's timeseries tutorial](https://github.com/TomasBeuzen/machine-learning-tutorials/blob/master/ml-timeseries/notebooks/supervised_time_series_intro.ipynb) for what this looks like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Trends (5 min)\n",
    "\n",
    "- I kind of regret picking the Rain in Australia dataset because it has a binary target value.\n",
    "- There are some important concepts in time series that rely on having a continuous target (like we do in the retail sales example above).\n",
    "- Part of that is the idea of seasonality and trends.\n",
    "- These are mostly taken care of by our feature engineering of the data variable, but there's something important left to discuss."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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C5x//vk0NTWxcuVK/uIv/oKxMX9k5r/9279x5pln0tzczPLly7nooov4zne+sxS/qsFgMBgMBoPBYAhQWMyZRsNvJzfccAOdnZ185jOfYeXKlfT19fGjH/0Iy7LI5/NMT0/zd3/3d6xZs4axsTFuueUWLrvsMvbu3cvq1atrPu673/1uPv7xj/NXf/VXfOxjH6Ovr4+/+7u/Y+fOndxzzz3E43H+67/+i3e84x28733v47nPfS7ZbJYnnniiqrA0GAwGg8FgMBgMS0OhZJGI16chmqLxFPngbbvYfXJK6xrOWtvB+1989oK/b2RkhAMHDvC9732PG2+80b39Fa94BQCpVIovfvGL7u3lcpnrrruOVatW8bWvfY23ve1toY979OhRPvaxj/H+97+f973vfe7t27dv58orr+S2227j93//97n33ns577zzfMdcf/31C/49DAaDwWAwGAwGw6mRL1l1Z6Gb9tRnICtWrGDr1q28+93v5gtf+AIHDhyoOuab3/wml156KZ2dnSQSCVpbW5mZmWHfvmCCSoU777wTy7J45StfSalUcv+79NJL6ejo4Fe/+hUAF198MY899hhvectb+OlPf0omk1my39VgMBgMBoPBYDBUUyhZFMtWXccapfEUORWFr1EQQnDnnXfygQ98gPe85z2Mjo6yZcsW3vnOd/KmN72J2267jZtuuok/+7M/4/3vfz8rV64kFotx/fXXk8vlaj7u0NAQANu2bQu9f3R0FIBXv/rV5HI5vvSlL3HLLbeQTCa5/vrr+cQnPmGiOwwGg8FgMBgMhiWmbElKljQzjYa52bp1K//5n/+JlJLHH3+cT33qU/zlX/4lmzdv5utf/zrbtm3jK1/5int8sVicd+ZwxYoVANxxxx0sX7685v1CCN7whjfwhje8gfHxce644w7e8Y53cNNNN3H//fcv3i9pMBgMBoPBYDA0GAOTOa7+2M/59puewznrlmlZQ6FkK4z15jSaovEZjhCCCy64gE984hN86UtfYufOnWQyGRIJ/0vj1ltvpVwuz/lYz3/+84nFYhw/fpznP//5df385cuXu8Xi5z73uVP+PQwGg8FgMBgMhqcDfRNZ8iWL3vGM9qLRKI2GmjzxxBO89a1v5aabbmLbtm2Uy2W+8pWvkEgkuPbaa+no6OC73/0ub3vb27jhhht4+OGH+fd//3c6OzvnfNzTTjuNv/3bv+XNb34z+/bt4+qrr6apqYkTJ05w55138rrXvY5rrrmGm2++mfb2di6//HJ6enrYv38/t956Ky94wQuiOQEGg8FgMBgMBoMm8iVbiKlX5VuSNThiUNmSSCnnNcQxReMzkNWrV7Nx40Y+8YlP0NvbS1NTE+eeey4/+MEPuPDCC3nWs57FiRMn+I//+A8+97nPcfHFF3PbbbfxB3/wB/M+9j/90z9x5pln8ulPf5pPf/rTCCHYsGEDz3ve8zj99NMBuOKKK/jyl7/MrbfeyuTkJGvXruVVr3oVH/zgB5f6VzcYDAaDwWAwGLSSV62hZY1FY7FigFOyJMn43EWjkFLfYhuFiy66SD700EM179+zZw9nnnlmhCsyhGGeB4PBYDAYDAbD053bdw7wxq8+zL+87Hz+6ML1WtZwaHiG5338lwDs/dALaUrGEUI8LKW8KOx4E7lhMBgMBoPBYDAYDBHhtqfWGXexFKiZRqivTdYUjQaDwWAwGAwGg+EZwfcfP8kX7z6sdQ0LdS5dCvLeorGO4tUUjQaDwWAwGAwGg+EZwfce7eMbD57QuobKTKNRGg0Gg8FgMBgMBoOhociXLK0Kn1oD6FUavUVjPbEbpmg0GAwGg8FgMBgMzwhyxTJFjQofNEjkRqmSv26UxkXEuMzqxZx/g8FgMBgMBsNTJVcqa426gErcRT0K31JRMDONi08ymSSbzepexjOabDZLMpnUvQyDwWAwGAwGw9OYXFF/e2rBKdJ0Kp6FsplpXHR6enro6+sjk8kYxStipJRkMhn6+vro6enRvRyDwWAwGAwGw9OYfKlMydLcntoASqNaQ73rSCzlYn5b6OjoAODkyZMUi0XNq3nmkUwmWbVqlfs8GAwGg8FgMBgMp0KuaOlvT3XmCYsa15H3Ko11rMMUjXXS0dFhihaDwWAwGAwGg+FpTGMY4TRa5IaZaTQYDAaDwWAwGAwNwO6TU1i64y6Klta2UGiMyA3jnmowGAwGg+EZRa5Ypnc8o3sZBkPD8sCRMf7nkV6ta+gdz3D9v9/Nz/cNaVuDZUkKZdsIR6dPScGN3GgMpdHkNBoMBoPBYPit5yv3HOWG/+/XupdhMDQsX73vGJ+4c7/WNUxkbF+Qyaw+f5B8aWGOoUu9jsaJ3DBFo8FgMBgMht9yRmfyTGSKxuHcYKhBrqg/mzBXdNQ1jetQa9C9DuVcqtUIx8w0GgwGg8FgeCahLrx0Z68ZDGEUy5b2DY18ydIeM5FThZLGdeR8c3z61qHmCRtGaTTtqQaDwWAwGH7bqTgRmqLR0FhM5Ypc8ME7uPvAiNZ12I6hRmn0ZhNqXUdJKY0NMtNo2lMNBoPBYDD8tlNwnQj1KikGQ5DRmQKzhTInNBs15UuW1ngHtQbQWyh5lUadimehAWYajXuqwWAwGAyGZxTqItQojYZGo9AgKrjdntogSqPGdeQaTmnU2J5aNjONBoPBYDAYnkEUGiDzzGAIQ6k52sPki2Xt7w+l8ulUPL1GOI2g8pU1q53NybizDqM0GgwGg8Fg+C1H7ZjrbE+1LMlffOVB7j00qm0NhsajEaIV1DrKmrMJlcrXCFEXoLeQzzfARle+ZNGatovGRYncEEJcJ4T4mRBiQAiRF0L0CiG+KYQ4K3DcciHEF4UQI0KIWSHET4UQ54Y8XpMQ4mNCiH4hRFYIca8Q4qqQ42JCiPcIIY4KIXJCiMeFEC+tscbXCyH2OuvbJ4R447y/ucFgMBgMht8KGqE9daZQ4q69QzxyfFzbGgyNR74BCiWoKGx6Ix70G+H4Ijd0FmxF/Z9Z+ZJFc2pxlcYu4GHgzcALgPcAZwP3CSE2AQghBPB94IXAW4CXAkng50KI9YHH+xLweuB9wA1AP/ATIcQFgeM+BHwA+BTwIuA+4FtCiOu9BwkhXg98Dvi28/O/BdwihHhTHb+bwWAwGAyGpzkNsWtf1G/yYWg8GqY9tQHMohoicsNTNGp1Lm2A7ohCyaI1lQDqe04S8x0gpfwa8DXvbUKIB4C9wB8BHwduBK4ErpVS/tw55l7gCPAu4K+c284HXgG8Vkr5Zee2XwK7gH9wHgchRA/wN8BHpZT/4vzYnwshtgEfBX7kHJcAPgzcKqV8r+e4tcCHhBBflFIW5z0LBoPBYDAYTolP//wg1+7o4cw1HdrWUFEa9eeu6TY8MTQWjRIH0xBKY4NFbuhqGS6VLfdn625PbVlkpTEM1bCvCrIbgZOqYASQUk4CtwEv8Xzfjc73fMNzXAn4OnCdECLt3HwdkAK+Gvi5XwXOFUJscf59OdAdctytwArsQtZgMBgMBsMSULYkH/vJPn70ZL/WdTSCEY7rhmhiPwwe3M0Eja/NUrninNoIJjSNsLkD+gpo71ylzgK6UCrT4iiNizLTqBBCxIUQKSHE6djtoAPYxR7Y7ao7Q75tF7BRCNHmOe6IlDIYVrMLu0jc5jkuDxwMOQ7gLM9xhPzs4HEGg8FgMBgWmUYo1nzraAAFQ7eiZGgsKq8L/aYr0CgbK/rNeEDfc9IoZjyF8uLPNCruxy7k9gPnYbeiDjn3dQFhk99jztfldR7X5fk6IastnsKOI+Qxg8cZDAaDwWBYZAoN0BYKnvZUnfNB5cZwyTQ0Fg0xb9sgRUojKI2NYITjVTu1xn4ULVqdorGeDomFFI1/ClyGPZM4BdwphNjs3CeAsN9ahPx7sY+jxrFzIoS4WQjxkBDioeHh4YV+u8FgMBgMz3gKDRBQ7V2HXiOcxjA8MTQWlfdIY7Rk6ixScg2gxudK+ovGQoMov4WyRUvabk8tL2Z7qpRyj5TyfscY53lAG/Bu5+4xwlU9pTCO13ncmOfrcseVdb7jCHnMrsD9VUgpPy+lvEhKeVF3d3etwwwGg8FgMNSgUdS1QgNEbjSK4YmhsWgEgyRvS6bODZ5cA8x35huoPTWViGl3T21JOjmNS2WEI6WcwJ43VDOIu6jMF3o5CzgupZzxHLdFCNESclyBygzjLiANnBZyHMBuz3GE/OzgcQaDwWAwGBaZQgPY+DfKOowRjiGMxmhP9aprGt8jRf3v01wjGOE456EtndC+0ZVOxojHxNK5pwohVgE7gEPOTd8H1gkhrvYc0wG82LkPz3FJ4GWe4xLATcAdUsq8c/Pt2EXkKwM/+lXATinlEeff9wIjNY4bA35zKr+fwWAwGAyG+Sk2gMIH3swz/Rfmus+FobFopHxEaIzWUK1qp/dcaHpO1GdFSyqu7TOrbEnKliQVjxOPicXJaRRCfAd4BHgCe5ZxO/A2oISd0Qh2MXgv8FUhxDux21Hfgz1z+H/UY0kpHxNCfAP4VyFEEjvH8U3AFjyFn5RySAjxSeA9Qohp5+ffBFyLJ8JDSlkUQvw9cIsQog/4qXPMa4G3SCkL854Bg8FgMBgMp0QjzBJC5SK0IdxTjdJo8NAY2YSNEWifawAnWa8Rjq62erWR0JpKMJvPaVmD+uxOJ2MkY6KumcZ5i0bgPuDlwDuwYzFOAL8APiKlPAogpbSEEDcA/wLcAjRhF5HXSClPBB7vNcCHgX8EOoHHgRdKKR8JHPdeYAZ4K7Aa2Ae8XEp5m/cgKeVnhRDSWd87gePAm6WUt9TxuxkMBoPBYDhF8g1g8qF2zKExYg10mwIZGotGeI/kGsR4xS2gNTvJtqUTzORL2t6rqmBrSccpTep1cE3F7fbUep6TeYtGKeU/A/9cx3Fj2Arfa+c5Lgu83flvruPK2IXlP9bxsz+HnR1pMBgMBoMhItTFj04jnEZxIlQXYbpNgQyNRb4B3iONojQ2RAFdLLtFoz4jHPv50DnTWPCY8STisaWbaTQYDAaDwWBQF3861bVCWf+MEjTGBbGh8VAFgs5Ae29Oo14X10Zo1bVoTatsQv3tqbpbZNMJpTQubk6jwWAwGAwGg0sjuJYWGuSCON8AGXSGxsN9jzTIHJ9eQx79BXSuZCuNAGVdSmOx0p6qy23ZG/uRjIm6PrdM0WgwGAwGg+GUaIScRr/SqL891RjhGLw0Qn6nV2nUm9Oov4DOFy3amuyiUdfnhfqsaE0lkBIsDesoeJXG+BJGbhgMBoPBYDAUGqAls9gwM436W3UNjYdSlXTmdzaCY2ipbLk/W+cmk1dp1JbT6DHCAT2vDbXZlk7EScRidX12mqLRYDAYDAbDKdFwSqNWkw+jNDYauWKZsVm96WuNYJDkVxr1vD5zDbAGsF8Trao9VXNraFtKrSP614YyR0qZmUaDwWAwGAxLTaEB1DUz02ioxb/ddYCXf+5erWtoBAXa656q6/Xpn6vUacZj0ZpqDKWxORXXtg612ZZKxEiYmUaDwWAwGH57uWPXAC/51K+1zMMoGsIIp2FmGtW5MEVjozA4mWNkJq91DflGmOPztXBrUhoboHAFW/ltTsXrVteWag2pRIxk3C7DdLw2vDONCTPTaDAYDAbDby+7Tk7xeO+k74IwalSbmc6LQL/SqN/FVecaDH6yxbJv5lUHjRJor9CtrrWk4traU6WU5IoWTQtQ15aCfNFyoy5AU3uqxz01bmYaDQaDwWD47cVte2uAuAudF8TFhlEanTgB057aMOSKZa3xDuBVoPXO8aUS+lQttQaA1nRCo2upo64l43bRqGkdhbJFOhEnGbeLRh2vUfXZnYo7BbSZaTQYDAaD4bcT9Ue/rFPlawQjnAZovYPGKA4MfnJFS7vyW1Gg9SqNyjFUV6GUc2Z+29MJbUpj3teSGdP22qgojXYZpuMzvOApoONmptFgMBgMht9eCmUVlK1fadTphugvGvW3ABojnMYhWyxjycZwLtWaj1gs05rWZ7oClTbdtqaExrZQew1NSVvl06VC50tl0omYR2mM/vNTdUak4vY6zEyjwWAwGAy/pTSCglFohJlGX+RGI7SnGqWxUVAtkbqeE8uSlfeIZhVcOYZqU9dUzEQ6oa2IV2pnU9LJJtR4LlJmptFgMBgMBkMUNETR2AAzjV6lUauiVNR/Lgx+8pqVcO+Ghs428lyx3ADtqZWZRl3dEbmSUhpVNqG+2cq0U7iCntenem2mE2am0WAwGAyG32rUH/1GaE/VqaJ42+10qnwmcqPxyBYc51KNLpmA0wqp97XZlNQbM6EKtvZ0AqmpZVg9H8qERtfrouC0pyZ0Ko3FihGOmWk0GAwGg+G3mIZQGpURjla1szKb0wjtqbqNVwwVVKGiq2BTr4mWlL45PrWOpqTemAnVGtrqKJ46Nni8SmMiHtOY02i5+YigZ860ULZIxgWxmDAzjQaDwWAw/Daju/XO+7O1qp3OGlrS8YYwwrGkPctm0I9SGnVnE7Y5MRNS6ivYbHUt1hBGOKBHkc95jHASMaHxXDhFo3JP1RS5kU7Y5kjxWMwUjQaDwWAw/LbSCO2QjaB2qgu/lmRcr9lI0ROgbmI3tCOl9Dja6lUalXOpvhm6sqts6WtPrRTQoOc5ybntqfa50DUDbT8fcVdp1HEu8qVKdmciVl/7tCkaDQaDwWB4GlLQfEEM/sJVl4qi1tCU0qc02gVKmVRcBagbpfGr9x1jaDqn7efnPQZJuhSlYEumTtdQZbyi71w4BXRKX/RHvuRVGmNa8yK9M406PrcKJcv9vIrHRF0jBqZoNBgMBoPhaYhxLq2sIRkXzkyjnovAkiWxpEdReoYXjaMzef7uuzv50RP92tagWlNBv3uqirvQVqQUK7mAut4juaL9Pk0nleqqT2ls0m6EY5F25ipBz7lQawDbqMlEbhgMBoPB8FtKI2Qkei+CdRWvxbLlOgDqazcLmHw8w9tTM07BVtCogivTE9Dvnqp7MyHnuKcm6iwOloJ8qUxTIl5R1zSci8pMoz1PqNcIR++5yAeVRlM0GgwGg8Gw+JwYyzCbL2ldg1L5GsGEBvQVjQUnKDvRCCYfmtsQGwXVBqjr+YCKqgT6itfKTKO+zQQppWN6EiOpsSVTtcgmXXVNX9Go5gl1FtApj3uqtvZUd6axvteFKRoNBoPBYFggf/iZe/jSr49oXUMjmNB421N1tb0VyxbJeP0B1UuBUhpb3HktfYX8Nx86wZ9+6X5tPx8qBZv39RE13vZUfUY4fvMXLXl8aubXURq1qfHFsi9mQo/5i2OEozF+RBk0ed1TdXxeFMr2GsAojQaDwWAwLAlSSkZn8oxnClrX0Qi5gL6iUbfSqDGDrhBoT9VZyD/RO8GDR8e0/XyAbFEpjQ3Snqq5bbklpe91kfc4hsZ1GuG4WZGqUNJxLsoIodxT9aiuxbJESnxGOFo2E4oepdHMNBoMBoPBsPgo0xOdF8TgbU/VH3cBGufGnJlGve1mgTgBjS3D2YKltS0UKm2AOk2a1BpAY3tqlWOonmgFsNW1pMbIjXzRcvMRQZMRjqPwCSHqNn9ZbNRr0R+5oaFoLFuknJzGhFEaDQaDwWBYfPIN0BYKXiMcvZEbybi+i0CAoqs0xrTOKIFndk3rLF+ZsiW1zlU2Qnuqt2jUtqERVKC1zPFVHEN1qvG20lgplHS8R3LF8oID7RcbtZGQ9qiuumYaK+2psbpik0zRaDAYDAbDAlAXwjqdIS1LuhddemcayzQn9TpDFsp20agzTqBKadT4nDREa2hDrMGb0/jMfV14lUZdLZngGOEkYhUjHB2qa9GiScVMxIQm5df+mao7AvRsuCkzHqDuNllTNBoMBoPBsAAqs4QaizXPxY5u99RWzS2Zdk6j5siNQLSCzudEGcA804vGhshprFIaGyCbUNN7JFcsB9pTNSiNjtoJzhyfpqgLqJjxgJ6/JYWSRTpemWmE+Z8TUzQaDAaDwbAAVIGgc27NF3WhNadR0pxSYd16cxp1qijB9lSdraEVpVFje2oDtHA3RE6js4YWtZmgW2mMxbSq8U2eQHsd79Vc0c6KBNWSqXHGNBF3z4WOdRRKFumkURoNBoPBYFgy1E5xoaTvgjjvab3TVaypublWjc6Q4HdP1aY0KkUppWYan9kqn5rb0tnC3SjtqSknHxH0xkw0JW2lUZt7qlOwqRloHe9VOyvSaU/VZYSjlEaPe6qOdeRL9mYb2AU0zP8ZbopGg8FgMBgWgNue2jBKo97WO91KY6EsnZxGfXECQaVRp8KWcdoyG8GEphGKZ9DnMJwv2i2AOkPcK4H2yixK40yj7siNUkVptFVXje2pibj+9tRkxT0V5v+bZopGg8FgMBgWQCO4pzZEPmLZH2ivr3gtu7v2OuMEANrSqoDWOMvXEAWbEwej2UVWUdRUQOdLZTfqAvQpSlCJeNDWqus4l+p0Ww4qjVqMcJz3Riphz2GDJvfUckVpTNSp/s5bNAoh/kgI8W0hxDEhRFYIsU8I8REhRLvnmM1CCFnjv87A4zUJIT4mhOh3Hu9eIcRVIT83JoR4jxDiqBAiJ4R4XAjx0hprfL0QYq8QIu+s743z/V4Gg8FgMJwK6o++ztY7b9Go3eQjpTdmQrmnJuIN0J7aCJEbhQaYaWyIwtUz06hrM6FkOYqSvvZUdR6akrZzqc4s06ZkvFIoaY/c0NOeWplptPMi7RiUaF8XpbJF2ZJV7qmLYYTzN0AZ+N/AC4HPAG8C7hRCBL//I8Dlgf+mA8d8CXg98D7gBqAf+IkQ4oLAcR8CPgB8CngRcB/wLSHE9d6DhBCvBz4HfNtZ37eAW4QQb6rjdzMYDAaDYUEUyso9tTGKRp1RF1BpT9VVsBVLkmTcvvgy7amNoTQ2yhraNBfxeScLTxVKeloyK0pjXEOBAvZnQ6FsuYUr6HltKDMegETczmmcL5twKdYAuIqnDtdn9dntzWmE+T+3EnU89oullMOef/9SCDEG/F/gd4Cfee47LKW8r9YDCSHOB14BvFZK+WXntl8Cu4B/AG50buvBLlY/KqX8F+fbfy6E2AZ8FPiRc1wC+DBwq5TyvZ7j1gIfEkJ8UUpZrON3NBgMBsPTgCMjs3zzoRO867ozEEJoWUPFPVVn5IZ3Xkuv0qjaU7Wtw1Ua9YR1gydyI6U3fqRYttzXZSOY0OhVOy3a0glm8iV9RjjFspMhqs8l0680Ci3znX7HUI2tusVK5EbSo66pltkoKHiKeIBkPPpZbLWGaqXxKc40BgpGxYPO13X1LxGwi8Ii8A3P45eArwPXCSHSzs3XASngq4Hv/ypwrhBii/Pvy4HukONuBVYAVy5wfQaDwWBoYO7cPcBnfnGI8Yy+/cCKe6pGd8oGUBqLQaVRo3tq0jEb0emSGRO4Koau5yTbAHN8UIm70K00tqTjxIReNT6djNc9M7YU+I1X9ERuuFmRHiMcLesIKI32OqJWGivtqaCUxmjPRT5YNC7WTGMNrna+7gnc/hEhREkIMSmE+L4Q4tzA/WcDR6SUmcDtu7CLxG2e4/LAwZDjAM7yHAewc57jDAaDwfBbgKvy6YwTcN1TNUZu+IrGxphp1KWuuUqj1siNsvbcNajMM4JelS/fAFmReSfiIRGPaVPB80W7PTWp0zG06Il40BZor9TOihGOjnPhnWlU6lrUr41gwaZD/Q2qnfXONNbTnupDCLEOu5X0p1LKh5yb89hzhXcAw8AO7BnIe4QQl0gpVXHZBYyHPOyY5371dUJWNxqHHUfIYwaPMxgMBsNvAa6C0QAFW6PMNGqLEwi2p2q4CJRS2tbxcdtUouTMKEXduqyCspMaZ9cgoDQ2RHuq3jU0JWOk4jGKmjJV86UyrelEpSVTi7pWJhWPEYsJuxVSk2spOEqjpo0VKaWdFZkMqGtRK42eIh7s6I/I1xAoXJckp1EI0QZ8DygBr1G3Syn7pZRvlFL+j5TybinlF4CrAAm81/sQzm1VDx3y73qPo8axcyKEuFkI8ZAQ4qHh4bAOXIPBYGgMZvMl7tw9qHsZDYH6g6uz9S7fAPNa3qJRZ1so6DXCUc+BndOotwUwnfBcEGsqlrxFo96ZxsZoT21OOTETWt1TYx5VS4/SmPbMrulyLYVANmHE56JkSSxJJadRGfJErjRWzgXY7am61uBGbix2TqMQogn4PrAVuE5K2TvX8VLKE8CvgYs9N48Rrv4t99yvvi4X1VuFYccR8phdgfvD1vd5KeVFUsqLuru7ax1mMBgM2vnBEyd5/X8+xNB0TvdStJNzW0M1qnxl/SqKX2nUZ7oC3siN6NehfmbKW7BpKxr1mnwAZAsNojSqjgCdc5VOe6ptNKI5csN5bZY1KY1uiLsTuRG1Y2gw9gOinyWsrCFghKPBhEYI3DbdpIaWYbc9Nai6LsZMoxAiiR1pcQlwvZTyyTrXFVQMdwFbhBAtgePOAgpUZhh3AWngtJDjAHZ7joPKbGOt4wwGg+Fpy3SuBFQUrmcybkaipnYzew36ZxpV4dqUjOkz+WgApdHrAuiqOVqs/MvaZ9egAdtTNb5HcsUyTak4Sc1RLGqWEHQ5hlaUxqQmlc9tT03YxkQQvRqv1uCNurDXEX1raMppp1friDxyQxWN8cC5eKpFo5PF+F/A84CXzBWpEfi+jcAVwP2em78PJIGXeY5LADcBd0gp887Nt2MXka8MPOyrgJ1SyiPOv+8FRmocNwb8pp61GgwGQyPjunVqvAgEePzEBENTetXOnJon1Kg0qudDp4riNaHRaUAD3sgNHe2p9hqUeypoak8t2jONOmfXwB9or2uOz7sO3YWrMsLR9Xyo14XOzYRcqVzlGBr1e8RtyUzGEUJoMX9xlUZP1AVE/7dEtSwrdCjhVe6pi5jT+GnsIu/DwKwQ4jLPfb1Syl4hxMexC9B7sY1wzgDeA1jAP6mDpZSPCSG+Afyro14eAd4EbMFT+Ekph4QQnwTeI4SYBh7BLiyvBV7iOa4ohPh74BYhRB/wU+eY1wJvkVIW6vj9DAaDoaFxlS2NM3QAr//Ph/i989bw/hcHmzuiI98AF6Nu0aizRVaZ0KTj2lSUSk6jCrTXofBVLn5Uy52uAHXvvJYuhS1bqDwHDZHTqLs9VWUTalMa7ddFRdXS8B4pWp5MwIoar9o0oyAXYv4S9bnI12jJjFp1zXvahUGz0uiZq4T5C+h6isYXOV/fi9/UBuCDwAew20TfBPw50I6t/v0M+KCUcl/ge16DXYD+I9AJPA68UEr5SOC49wIzwFuB1cA+4OVSytu8B0kpPyuEkMA7gHcCx4E3SylvqeN3MxgMhjmZyhVJxWOR/oENotQ1nYUS2G2ymXx5/gOXkMq50Omeqr+IV2toTSX0RW4ElEYt7alqpjEec3++HiMcuw1RCKEld03ROO2p+iM3csUyzUndM41O23JcoxFOqdwALZn+ecKEhkI+ONOYcNXfiIvXol9ptCNhIi4ay36lMVlnl8a8RaOUcnMdx/wH8B/zHeccmwXe7vw313Fl7MLyH+t4zM9hR34YDAbDovLKL9zP5aet4H9ff6a2NTSCuialJFcqay9cG+FcuFmRmuIdwD9PqGu2MpjTqKNA8BrhqP/XM9No0Za2z4Muh0powKLRsrS8R6SUZItlJxdQT9HoxsFo3kzIO226oM8x1GuEA3ZLZvRtocq1NOAYGnUBXQ4UjRpeF657amKRZxoNBoPhmUz/ZJZB3XN8niJFF4WyhZT65yrdmUadKp/nHGhre3MC7ZMxfSpKtRFO9OtwjXAaYabRMyul63WR87mn6llDqWxRsiTJuEBKfVEsllS5gELLZ6eKeHCdSzVtJniVRl2Ooao1tEnjuahkRVbUTtDQnlq0SCUqnUsJDUZNlfbUhc00mqLRYDAY5iBftLTPEjaCfX2+AYo1qCiNOotXr4utNhMaJ9A+ocGu3V1D0AhHwzrUxU8yEatc+OhQczwX5jpzAX05jZo+L9TGTntTEtDzush6WhF1bazkPRsaoG8zIReiNOqKu3BdXJ3ojygJtsgmNWWqqpZlRSKub6axWmlcpJxGg8FgeCaSL1na1bV8g9jXg/65ykYoXtXFB+hzqCyULDebUNfroui58IjH9BRK3pnGSuSGLiOcyq69zsiNZNxxp9Ts4NreZLfr6vj8zHuLxoQeIxy1Bu88oe4NjcpspZ64C6/Kpytyw3WS1RQ/EnRP1WkKtNCZRlM0GgwGQw3KlqRQtrQZjSgaQmlU+Yi6i8YGKF7znudBl4OqWzRqNF0plO2Q6kRM2O1munMaNcUJQMUlE1RYtyalsaB3jg8qRaOa8dRxLlSB0JyMa7koB49bp+fCXMd7JFe0FtyGuPhrKBOPCVfdS8T0RW6kE5rbU0uWzz1Vx2dn8LVpZhoNBoPhKaIuSHU6AELlj53ObMJcg8R+uHEXDVI06mwNTTtFo7Y1eEKqda1DvTf9SqMeZcu9MNdUHEDQMVTXGuzz39Eo7anxGAVN6jN4ihRtxWu5ao5PRy5gk2Z1rVpp1NOeWggqjRpGDIKt04uZ02gwGAzPSFQbou6WTDfzTGtLpv5iDRrDyj/fAA6VtplCTKuiVChblYsOT+RFpGvwKY0ajXAc5RecC2JdOY3FMs2pOJZG06pge6qO16fXrVOX8lvl1qlp/tjbDllvG+Jikyv6swn1FErOayIRLKCjX0cqWEBHvCE8NptneUvSdTVWSuN8XStGaTQYDIYaNIJrKTRGwVax0G+Mc6FTdfVejGst2BL6nCGh0iILaJuhK5TL7s+Pa5ppLFuSkiU9ipLe9tTmZJxUXGhrZ1cX58oIR0fxqj6vmpNxEhpMV6DS0p9O6mvJlFKSK5arsgmj/vy0zXj0ZhN61WfQdy6qcxqj/wwfnMrT097k/jtZZ6uuKRoNBoOhBo2iNOYboDXUVTs1zlUqK3/Q5wwJ9h995RiqtWCLx5w2L/1FY1xXe6pjRKRUV4heRXHt65MV1VWnEY5t/qJzplG5p6qZRn3tqelknGRcaPm8UMVy2uNcGvVmghv74VE7IfqNlZynRRbs6I+oz8XoTIHmZLzSnqpJdfXOP4Oez86h6Tw9HWnfGsAY4RgMBsMpk2+wmUatMRMNUED7Zgk1Kp75kkWLE2ivq3hVBZtOl8xC2fIYW2hSc5R7asIz06g5NDypMXKjEWYas4VGaE+tzK8lNbT/gUdp9ITJR/0eydVS16JuySxa2ttTh51CSbVkJp1zoaM91as06nh9Dk/lfEpjos5zYYpGg8FgqIEbdaFbaXRjJnS2p+pv1c15Zwm1ZlaWKyqKpvORL9sB0TrbU4tlzxyfpkKp4DF0UBc+ZU2mEv72VH1KY0tKmb/oymlsgMiNkrc9VVPkhrOGSgu3vmiFKqVRw8aKr1CKxyJfw9B0ju62irrmuqfqMMJJ6jPCsSw5h9JoZhoNBoPhlFAXP9ojN1z3VP0Fm9a2UF/UhV6lsTWtAu31KY1pJ9Be5xpScX0qClTOv9cIR8eMEngvzPU9J5lCmaaUM9OovT3VcU/V8Jmh1E6d8SNVmwkaNniCMRNJjZEbTd5CKRZ9oP3wdJ7udk/R6HYmRLeOXLFMvmTRnq74kEb92TmeKVCyJKtCzoWZaTQYDIZTJN8ArqUAuZL+jMRcA7Sn5hrAtVRKSaFk0ZrS13oHFQe+pCZHRnsNllYVBYJKoz43RMAXoK4tcqPgbU9tkJxGLdmE3qJRl2tpwD01Fn0hn6+at9WjruWKlm+mUcfc7/B0nh5voaRmoCM8F73jWQDWL2/xrSPK52NoOg9AT0elPTUWE8SEmWk0GAyGU6YR5vhKZcv9INdphJNvgPZUfz6irmJNv8kHOEpjPEZc07yWWoNSGrUZ4ZQthLB/fkKTEU5QUYrrjtxQRWNJX1Yk6G1PzTqfVzoL6Gr31OhjaSoquKM0xqNX18DJikwEAu0jfE5yxTJTuZJfaazTMXQxOTGeAWD98ubKOiJWGt2i0XMu7HXMX8ibotFgMBhq0BBzfN6WzEZQGjW2p/qVRk3FmvMctKb1Ko1eI5zGmGnUUyipwlUI4VEaNRvh6IzccHIakwl9M42qiO5o1teeWmnLjLmvTSk1z7pqmK1Un9u6A+1zxeAcX7SfF8NuoeSJmdBghKOUxg1dXqUx2s/wwakc4D8XYG+8mZlGg8FgOEXyplDyrMNp1dWYj5hvgAJa7dxXikZ9xWvKmWmUUk+gfcFbNMb0GOHkvXOVuiz0q2Ya9aiuliXdNkC9M41lhMBt4dbSnuoYr8RigmSd81qLTbWrbvRdAUGlUYe6Bs5MY8IfuRHl61Opa16lUZm/RFlA945lSCViPkOeuKNAR7Wp4RbQHQGlsY7i1RSNBoOhIZnNl/jmgyci3x324kZuaCyUvEWjTkOeSquufjMeex16g8sr81p6W0MruWt65gl9Rjia2lO9WZGgo/VOtSFW8vh0fGaodTTCTGNTIl5phdQRuVGo5AImE0pRit4lEypFo44W7qDSqCJytBvhRLyxMhxSNNYbaL+YnBjPsL6zmZjzWQUsyabGibEME5lC6H1DUzk6mhK+GVOoz5zIFI0Gg6EhuWP3AO/69hMcG81oW4PrWqpzlrAB1DWo7FiXLYmlK2bCN9Oodw26jXC87amgR80plCz3gjypsz3VbQuN3tgCarWn6gu0b07GtOY02mpnzC1QdDguqzUAGg2SLGKiYriio5W8SmmMRe8wXChZTOdLLHPalUG1p0a3huFp1ZJZKRqFEHYhv4jrmMgU+MwvDtX8G9k7nmW9pzUVIL4EHRJ//Pn7+OiP94beNziV95nguOswM40Gg+HpymzevgDKa2wNdfMRNczDKHzqWgNEbtjr0OvKCPqcZCvtqSpyI/rnpGxJSpYknYhrm1EC+3f3G+FoUDvLlluc6Gq9q87C0+Mk6xaNKqdR02enrSrF3WJex3skV7INgQDPOqJ3Lk37zF905DT6nX1VARvlczIwmUNKWOcxf7HbU6NVGmMCVrQFzV8WtsEj5dzXAt95tI9/vn0v+wanQ+8/MZbxmeCAd7ZycV4bIzN5+iayHBqeCb1/aDpXZYIDSmk0M40Gg+FpiCoQGkFds9ehb9feXcMzfLayovLFNSqNfmdIHetwYyY8SqOe8HJv5Ia+nMbKXKVTQOtSc5IVh0odGzzebMJUQt9MY9YpGnWoWu4aPO2pCU3ZhPliuSrEPXK103ltVs5F9HN8fRO2+cu6Tn/MRJSzx8Mzebpa024Lu7uOBRav7/jW4/zlfz1S8/69/XaxqMxmvMzkS4xnimxYHlAaY4urNKo19DmmO0GGpvOsClEa65lpTMx5r8FgMGhCFSl6lUb/DJ26ONW1hkaJuyiWLKjeqFz6Naj8t6aE1rZQ0Oue6i0alXKg48K84JiNgL7IjUKIEY42NcdzLnQYE+Xc9lTdM40W6UTMbV3W0p5asjwzprpcdS33NQG2ohT1+zQXzIrUoMa7RaM3ZmIJjJq+8psjrOls5rqzV1fdNzSVD1fX4rF51TUv9xwcRYja9+8dmLJ/njND6aU3JG4DWPSNvz399hoGpnIUPZ0YYCulNc+FmWk0GAxPV1y3Tq1h8g0wQ+dTOxtEadTUnqoK17Z0Qlurbr4BisZ82X4ubPdUVSjpcU9VFzxRzyhV1iDd4kTn7Bp4Q9z1FGzB9lR9HQFOe6qGVkhFrlim2VH5KuvQ254a1+CqOzZbQAjcecLFboWsB6V4rVlWUbeWIpvw3392kK89cDz0vuGZvM8ER7GQroCJTIGBqRwDU7nQjZCyJdk/aLeEDocUjSfGquM2wJ4lVN+/GOxxCldL2q3BXiazRQplK/Rc1LPxZ4pGg8HQkDREe2pJf6HUCI6h9joaoVVXKY1Jba263sIV9BnQAKTjFbMRHa+NYll6TGj0tKcWSmXSzjlQxhaRR254lF9wWnV1GOEU/Eqjrrlf5ZSp87Wp5ipB56xrOaA0Rv8eGZzK09WScp+LWEwQE9FuMvVNZOhuT/vcOhOLHDMxmS0yNlsILdbAVhrDCqWFzJnuHbDbPqWE/snq1s/jYxl34yasPVUpjRsCSuNiK+F7+qfdeV6l8iqUAhranlqHEm6KRoPB0JBkG6Jo1K/yNcIcn70O/dEf+ZKFENCSjGuLulDnwXVP1VC8ettTF3sepl7KlqRsSVJx++IkHotpa09NJir9YvGYiHyDxy0a3TZZPaqr+sz05jTqMPDKFS2ak3HiMYEQej4vvLmAulxc82GB9hGfi+HpXJVTZtSRMH0TWdZ1Lm1L5rHRWSBc4bMsychMeEvmQtrq9w1UzG2Uauhlr9MWmogJhqbClcbmZJyu1pTv9sQCP8Nn8iU+8qM9zORLVfcVyxYHh6a5avtKoHquURWz4a26pj3VYDA8TVHKVqHUGI6hugq2nGeOT5dyYK9DfwHt5r8lYhQ0twu77qk61LVypR1SlxGOugBXBZtthKPXwRVsNacceXuqrSgJZ9hJOUNGXbDlAu2pUka/maDW4WYkxvW8V7PFMs2pijER6HHV9bmnajBIGpquLpYWOxLm+GiGP/3S/UzliqH3941nffOMwIJnsQcmc7zwX3/F4RqOoEdG7KJxdLZQFXcxnilQsmTN9tR6Xxd7B6bcTTqlGvrvnyYm4PwNnQxNVyuNJ8YzbOhqdj8nFHOdi2LZqtpo+PGT/XzuV4e5a89g1fGHhmcoliXP27EKCFEanWI2LHKjnpZhUzQaDIaGJFcySiNULgTbm5JalcZcqezuiOoq5PMle+c+FdcT76DWALaak9S0Dp8RTmxhF1+LtoayX13TaoTjaQGMa2gBzBf9hifqIjDqgs3Xnqo57kIVjSlNhjz+nEY9sTRekyZwjHAiXkOY6cliO5fefXCYuw+MsOfkVNV9liU5OZFjfUBpXOj88V17B9k7MM1Dx8ZD7z86YhdxZUsyHgi1H55xCqX2MMfQ+rsC9g5M8+yNncRjgt4QZ9K9A1NsXtnKxq4WBkOUxt7xLOsDzqkw97l49Zce4D3/86TvtvsOjwHw2ImJ6jU4zqnnb+hkZVu6SmlU7amnqrqaotFgMDQkuUKjFY16jVfa0gltLZlgXxi7MRO6WkOLFk1ONqE+99SKG6GudeR97ql6lUY30D4e0zPTGHAHTGpoDc17nDpB3wxdNuCeCnryTL0FW3IJXDLrW4Nf7YToz0W+5I/ciMcElqRm8PtiU7YkwzN5ejoCSuMiPyfHx+yCbWSmUHXfyEyeQtmqUhrVc1JvEa0KpVoxEked9lSoFInuv51CKXymsb7IDcuS7BuY5uy1y1izrKmm0njm6g562tMMT+d9nQZSSnrHMlXzjGoNEL7JtLNvktt3DrjPl5SS+w6PAvB4SNG4p3+KVDzG1u5W1i1vrlIaB6dytKUTrpGbfx1mptFgMDxNaQSlsRFMaFRbaFs6oa0lE+wLoLYmfY6hYL8m0knbyl9fTqM/I1HHZkLBM0O30IuvRVtDuXIeQIVk61FdUz6VL3rFM2h4Uskn1FQ0puyZRtBnQqPaMhOaXFz9RaMeh+GqyI2INxPGZguULVllepJY5PnjXme+bzikJbPXzWgMN3+p51x4C6WTE+FF45GRWdf8JTjX6LZk1pjjq+dzq3c8S6ZQZsfqdtYvb+ZEoHidzZc4Npphx+p2utvTFMoWk9lKu+5UtsR0vlTlnKrWANXv1clskem8/X0PHrWL5hNjWfomsnS2JNl1cqrqe/YMTLOtp41kPMb6zuqicTikXdm7DjPTaDAYFswHvr+Lr/zmiNY1uDONWgulBmhPLZVJxgXpRPStTb51FC3a0rZtu7b2VEdpTMaEtvnOfKBg05OP6G1P1VOguDONqj1VU6B9oRxoDY1FX6QEiwNd7ZCqO8OeddXnXJovWlrbU8uWpFiWrhFOQtO5qJ5pjLaVXM3VBYuExTaLmktpVMpgldLottXP/149NDzrFoLBIkhxdHSWZ23sBKqLRqU81nRPrWMNKsbijNXtrF/eUqU07h+cdu9XRbo3q/FEjYxGtQaoVhq9P+Pne4cAuPfwCACvvmwT+ZLlM+cBW2k8c00HgKs0epXtoelc6HmA+lr7TdFoMBiquGvvIPc6O3u6UPM5uqIVwA6Tb3HMFHS03oHH/EVjWLdaR3tab3uqqzTGdSqN9mxnIm63hhY1FND+9lQ9F8TFgNKYjC3unNRC1uFtT7V3yzW4ZHqKA13mRNlimeZkHCFEpWiM+PVZtiSFst721IohUGUNoCG/sxiuQEe1jiG3LdOvNC52JIwqiEZmquf4+uZTGut4bSiV8dx1y0KVxolMgYlMkYs3dwHhSmNrKh7aklnvudjbP40QsH1VOxuW2zOLXkdxFcdx5poOt0j3xm6cGFNF41xKo38dquBe2ZbmLqdovO/wGCvbUrz0wvUAPN474R4/MpNneDrPmWvaAfucF0oWI7OV8zE4lQ+N2wDVLWKKRoPBsECyBStye/IgjdCeWihZWkPcoWL+oqPtTlEqW5Qs6c40ajsXaqZR05yUWoN3jk9HfmeYe2rUr41CVcyEWNTctYWsw2s2YqsoGtpTA9EKEP3mis8xNKFnji/nif0AtGx2ZUPWANE/H9O5kq9QWWi0wlNlqEa8wmJGwkxmi0xk7DbM0KJxPEtHU4L2pqTv9vgCCuj7Do+yuqOJ55y2gpMTuaqZUOWces66ZTQn46FK49zq2vznYt/gFJu6WmhNJ1y10Dtfubd/irZ0gnWdza4zqTd2QxnnbAg1wglXGlXB/SeXbODw8CzHRme599Aol25dwcauFpa3JHnixKRnDZXCFSqFulqnlJKh6VzN9tR4HaqrKRoNBkMVuWJZm/GLQkUbNIq6pjPQPp2I221e2rIJ7Z+rikZd7alepVFvEV+5GNXlGAqQdkyBIPoL4mCgvc422ZQvQD2mIXIj2J6qp5DPFix3rkvXTKNbNKrXhYaZxsoa/EVjlOdiOmfPo61ZVlF1Ekswf3z7zn7uPjAcep8qWoIFU73mL4rP/fIQ/3Db7tD7lIImBAyHtadOZFkXUijVW8jb84xjXLa1i3XLmymU/coZVExwtqxsobs9XWWEMzSVC3VOVesIOxdjswU+/MPdTDhOrHv7pzljta3gqaLR66C6d2Ca7avaiMWEW5QF21PbmxIsa/EXz+BRGgPnonc8S1Myxh85quKXf3OUgakcl29dgRCC8zd0+pTGPU5O5A5nnaolWBWf0/kSuaJVZYzkriM2f5eGKRoNBoMPKSXZYlm70qh2i3XPNCrzF20RD44Toa5WSPBnRYJe99R0Iq7NgAbsIiXtKZT0uKfaz0cjuKd6A+0h2kLJsiQlS/raU+tVDhaT4OyarnlC2/ylooJrWYPzulCKZ0pLe6oTi+OsIeq2UID+SVvlW+tpy3TbZBdxY+Wfb9/Hv/30QOh9Q9N5OluSruJaWUft+fiwToFvP9LLfz98IvQ+NXd3ek8bI9PhSmOwNRXq31g5NDzLyEyey7auqFLOFEdGMsQEbOhyisYFKI12oVS9hl/uH+ILdx/h5lsfZjJb5OjoLDtW2wqeMrPp9Sh4ewem2eEofK3pBG3phK89tXc8G6oyes9FcLOrz4no2LSila3drXz1vmMAXLZ1BQDnre9k/+A0mUIJgIeOjdHTnmZFm/27rgsoohXluUZ7ah2ZlfMWjUKIPxJCfFsIcUwIkRVC7BNCfEQI0R44brkQ4otCiBEhxKwQ4qdCiHNDHq9JCPExIUS/83j3CiGuCjkuJoR4jxDiqBAiJ4R4XAjx0hprfL0QYq8QIu+s743z/V4GgyGcYlm6cyk6UYWK7siNNu3tqbbSuJgtRQtFXQgqIxzt7qkaz0W+VK7M8WlyhvQWbFG3vCmCM43uhXmEz0vQwRUWFta9WOSL5SoHV9DjnloJtNdXuILe9tSg2pnUsKGh1J21nR6lcZENkixL0jeedWcKg9RqRaxVHBwYnObs9/+Eg0MVc5VsoczBoRmmcqXQ7EFlgvPsjcsZnqmOmeibyIaav9T7+lTzjJdtXeEW4Ccn/C6tR0dmWdvZTDoRp7stpGicmqNorPH6VD/jgSNj/PmXH8CSFQVvVUcTiZhwC+a+iSyT2aJ7P+DGbij2D06zpbs1fA01ukX6JioF97Vn9FCyJN3taU5zHueCDcuwJOzsm+LBo2P8ZNegq0oCdDQlaW9KuK/FgUnHRXYOpXExZhr/BigD/xt4IfAZ4E3AnUKIGIAQQgDfd+5/C/BSIAn8XAixPvB4XwJeD7wPuAHoB34ihLggcNyHgA8AnwJeBNwHfEsIcb33ICHE64HPAd92fv63gFuEEG+q43czGAwBXIVPo9IopawUjRrXkSuWPTONulQ+W2lMxWPanpO881xUZhr1uqeqlreo5+fA34poFyh63VN1FQeFGu2pUbaGukVjUGmM+PU5NltguaftTF97atltT3WzCSPuTlCf22lPa2jUHRLVhWv0rbon3aKxUjAtdlfAsJOBODiV98VDKYam86GqUrJG5Mbu/ikyhTK/3D/i3rZnYApVXyqHUC8nxrIsa06ytbuVQsliOl9y75vKlpjJl8KVxjo3Vu47PMqaZU1sWtHiabf0F8lHR2fZstIupILtqdlCmel8aU6lMWwN/ZN2rMU7nr+dR49PALhKYjwmWNtZid24fecAAFduW+l+f3d72nWvHZnJ0zue5YL1neFrqHEuescz7u987Y4eALc1FWylEeDhY+P8/Xd3snZZE2++dpvvMdZ1NrtK4w+f7CediHGW83sEiddhZlZP0fhiKeXLpZT/JaX8pZTyX4G/Ai4Ffsc55kbgSuBPpZRfk1Le7twWA96lHkgIcT7wCuBtUsovSCnvAl4OHAf+wXNcD3ax+lEp5b9IKX8upXwD8HPgo57jEsCHgVullO91jvs74CvAh4QQ1c3DBoNhTlzXUp0GNGXL/UOlS/F0zV90O4Y6eWO1/rhFswb/TKNW1TUZc+e1dJwPbytirV3qpcYXuaHpXFTlNKriNcL3SbFUrTRGrciXyhYjM3lWd4QoShqMcNyoi4SumUanNTRZMUiKehbbm1dpryH6jZX+iRzxmPAVbbUMT04VNU8IhIbND02FZ/Ilamx2qRnIR46Pu7ft6qsYrYQVjcfHMmzsamGl0xLpbVHtdYq7YNwGVM7FXM9J/2SWew6NcplTKHU0JWlPJ3ztqVJKjozMsnlFpWicyBTdz8iROeI2wPm8CFnDwGSO1R12EfbHF29gVUeajZ6MxfXLm91zftvjJzlnXQdbu9vc+1d1NLnK7BPO3OF565eFryFkkylTKDGeKboq7UWbu3ju6St9SuLKtjTrOpu55ecH2TswzftefBYtKb9D7HondmMiU+A7j/by+xeso7MlVXMd831mzVs0SinDJmwfdL6uc77eCJyUUv7c832TwG3ASzzfdyNQBL7hOa4EfB24TgihntXrgBTw1cDP/SpwrhBii/Pvy4HukONuBVZgF7IGg2EBVGYJ9WYCKnQVKOr3dwPtdWUTOsqWzkB75WTrFo3aFM+K0giaMug8Qe66ZisLZQsh7D/yujIBgzmNOtpka7anRvicDM/ksSSs8hmeaIrcCFEaI88mDKh8OnIa3cI1UVkDRPt8nJzIsrqjyXUJhdoh7gDHRm13zIXgNWI5PuYvGqWUdpB7SLxCLXMipYw9esxTNJ6corMlycq2VA2lMcOGruZK0egxw3EzGkOURqX+1vq8eOjoGC/+/35DvljmVZdtdG+3swcr7anjmSLTuRKbHaVRrWPUMctRc4W1isZkjc3YkxM51nY2I4TgI394Lne/61rfc7lheQu941mOjszyeO8kLzl/ne/7exylUUrJYycmiQnb3TWMREhmZfDcpRIxbv2LS7lqe7fvey/Y0Ml0vsRV27u57uzVVY+tlMZvPHiCXNHiz56zOXQNUHHAnotTNcK52vm6x/l6NrAz5LhdwEYhRJvnuCNSyuCWyC7sInGb57g8cDDkOICzPMcR8rODxxkMhjpplHxEhc4geaDSnqpZaVSB9lpaMov+mUZtiqdnphH0tMnmi5YbrzCXocRSosx47Dw+TUY4gdZQHUY4aiPHb4QTizRyY8AxPPG6ZFZm6KJX2Fp0zzSWQmYaNbWnqpzGhWQCLhZ9E1nfPCNUCqWwz893/vcT/NXXH1vQz/CqiyfG/OYwE5kihbIVqjQmayhKyu3z5GSO/kn78XaenOTcdcvYvqqdfYMzvuMtS9oGLx6l0TvH52Y0himNc3xefO+xPv7kC/fR3pTgu//rCi7c1OXet7az2X1cqMRtbFlpq4CqOFTr2OcUuts8KqB/HeGbTP2TWfc9LYTwbUyBreANT+f55kMnEAJuOH+N7/6ejjS5ot2u+/iJCbavag/NiVRrsM9F5TlRGwJhuY5eLjttBc3JOB948Vlu26qXdcubmc6X+OKvj3Dpli7OWhvemgr1ueouuGgUQqzDbiX9qZTyIefmLmA85PAx5+vyOo/r8nydkNVXR2HHEfKYweMMDcyBwWnOet/tvlYLHXzwtl38f3eFu5BFRbFscefuQS2FgaIRlMasp2jUaboCVIxwNBXRuZLTnhpf3Namha4BKudCx2ujbEmKZUmT454KupRGT3vqAq3rF3MNVcVaxJsaldiPgBFOhM9JoVxxkVUk67CNX0xU0bjK157aOEY4UbtPh7anRl08F/xzlRWTpmjdU9csCwTaz9EVcGhoht0nJ32B8ZYl+caDx113zCC941lWtqVoSsaqlEZVAIaZntSa+x2cytHqvH4eOTZBoWSxb2Cas9Z2sH1VOwcHp33XJoPTOQpliw3LW9xizZvV2OdERqxorW6HnOvz4lM/O8jpPe18939dwemrfJ6brOtsdudFwTbBAXztqVApGnf2TbGsORlqxmOfi+p29myhzHim6JtHDbK+y77v1vuOcfHmrqrnepWb1Zjjid4Jzq8xzwjhnxe9E6porL0GgFdespH73vM8X2usl3WddtE5PJ3nNVdsnvOxFmum0cVRDL8HlIDXeO8Cwn5SsOxdiuOoceycCCFuFkI8JIR4aHg4POPGEA2HR2bJFMq+3SMd/ObgCA8eC9vTiI5f7Bvm9f/5EAeHZuY/eInINYARTiO0p+YDc3w65wnTCd3qWrA9VUeh5FwIepRGXRmJqmDTlReZL1mkghfEuiI3En41J8pNjXwg9gOiN8IZcNrffDONulS+QtnXFgrRb3apgs3bGhp1l4Zqs1Tql1Lko3o+LEvSP5mtKjpqbSZM5YqMzhYoliX7Byp/+x88OsbffvtJvvVQb+jP6XUiGTZ2tVQVjYNzxCvU+twams7znG0rSSdiPHJ8nP2D0xTLknPW2krjbOA6TambG7ta6GpNERP+ovGkcw7CFLBas9hS2urlZVtXsKy52pZkbWczk9kiM47hztHRWeIx4cZgVBeNk5yzriN0Dfa5qN74Uyqrt3sgiFIAp3Mlbjx/bdX9ah0PHR1nPFPk/A2dNR8rLL+zbzxLKh6juy28rVYRi4nQ7MfKOu3X4LrOZn73zFVzPlatWVffz5vzXg9CiCZsh9StwHVSSu+reIxwVU8pjON1Hjfm+bpcVD/LYccR8phdgfurkFJ+Xkp5kZTyou7u7lqHGSKgEYoUgEyhTKFU7UAWJZPZIoD7gagD9Udf70yjfqVRXZC2pnQ7hjrtqTUCgKNAFfHNqTgxoccUKO/OKcW0qFruOpwWWdBXNBZ8Dq56Cmj1+VCZaYx+U0P9LGX6otYT5QbPwFSOVDxGl0dNcdsQo55pLHpmGnUZ4TRAe2rfRJYVrSlXdQX79RlVe+rIbJ5iWVa1p9ZqyTw+Win4nvQYzzzkbGLfe2g09OecGM+wocsuGoOdWkppXBWiNNaK3BieyrOus5lz1y3jkePj7Dppr+WcdcvYvspWsrxzjapQ3djVQjwm6GpN+YrGw8OzbOqqlU0YvrEynimSLZZDW1qh0uqq1MbHTkyweUWL+zm0ss1+Hw5P512ltNYsoVpHcKOr3205r63yqczFRExw/blrqu5XxfqduwcBOH9D7TXEw5TG8QxrO5uIxcKL3XrZvKKVVCLGa67Y7L7+alErs9JLXUWj40L6beAS4Hop5ZOBQ3ZRmS/0chZwXEo54zluixAi+Co6CyhQmWHcBaSB00KOA9jtOY6Qnx08ztDAZBrArRPsYklXYVBZg10s6iygs24+ov4WWYi+vUoRDLTX1yZraVfX8p4LwWQ8pmVDIecqjXFX3dLXnlpR13Qo0IWy5Z4DdU0RdSEfdC7VYoTjKo2V4sBWGqM7F4OTOVYtS/uUjLCLwKWm6Lg96zbCcTeYPMVr1Gvom8hVFR1RmlapjL+1wfbUGht/x2oUjQ8etXWP+46MYgVeS2VLctLJQNzgKI3e1lGltoYpjYmQyA1vNMWzNy1nV98Ujx6foC2dYFNXi9smut8z13hiLIMQlViRlW1phqdtI5xCyeLQ8IwbUxGk1sbKXOY53tv7xrMMTef4zcERX9GWTsRZ1pxkeCbP/sFpCmWLc+coGsMUaFWQzqU09rSnSSViXHn6St+GkXu/U6z/+uAI6USM7YE22+AaIGCEM5GtWTgvhGUtSe5+1zX8xZVb5j12UWYanSzG/wKeB7xESnlfyGHfB9YJIa72fF8H8GLnPu9xSeBlnuMSwE3AHVJKtUVxO3YR+crAz3kVsFNKecT5973ASI3jxoDfzPf7GfTTCBEPoJRG/WsAzfOEzhrKltQyPweVgi0RE/qcOgNKow7DE8uSFErKMVSfupbzqHy2+Ys+M56mZEyLquWuwzPTqOtcFEplt/1Qtd7piNxQDq5Q+4J4SdfgOrj6HSqjVhpXdwQNT6KfMw3GTOibaay0kYNdoET996xvPFNVdETZFRCW0Qh2PiJUF0pHHdfUCzZ0stMpGi1L8sixcTpbkkxkiuwd8DuXDk3nKJYl65c3s7GrhUyhzOhsxbl0aCpPezrhU1vddYQUSpUiM82zNy6nULa47fGTnLW2w26BbE6yuqOJ/Z51nBjLsHZZs7tx1N2edpXGwyMzFMvSF3jvpdYstspgrDXL5xaNE1lue7wfS8JLLvC3h3a3pxmezrsF+FxFYzzEPVXNKa+eo2iMxQT/dtMF/N3vhftttqcTNCfj5EsW56xb5jPrClsDVLen1iqcF8qqjqaa7bn+dcyvI4Zb+fj5NHaR92FgVghxmee+XqdN9fvYBdxXhRDvxG5HfQ/2zOH/UQdLKR8TQnwD+FdHvTwCvAnYgqfwk1IOCSE+CbxHCDENPIJdWF6LJ8JDSlkUQvw9cIsQog/4qXPMa4G3SCkr7yBDw6L+2OU1FmyWJckWy9oL19mC/lbdoAlNPFb9R2epUUVKR3NSayYg2EVKMi60KJ7qYiudjLkXHHqKRq/SGL1yAB6lMRF3/8hqURqL/sgNHRs8hZLlzyaMsPXOu4ZkPOZejCRqXBAvJer595+LiGcaJ3NV7W9huWtLTa7gbwtNaVIa88UyQlQMklIRRwVJKembyHLNGT2+22u5ZC4FlaIx2J6q1Pig0jhLd3uaS7d28R+/PkK+VOboSIapXIm3P387n7hzP/ceHvU5X3rdNdV7//hYxp3jHJrO0R3SmqrWEdwQrhjnNHHmGrvQmy2UOWdt5bW9fXU7+4f87ane4m5lW5rDw3YBvLffPu7MWkpjjVnsyu8VXjD1tKdJxgV9E1l+c3CEs9d2sK3HX5h2t1WKxvamhC9fMUgibrenSindz7KTkzlWtKbc91ItXhTSlqoQQtDTkebYaGZOExzwbCY4z0muWGZoOj+vc+pik4jPX1jW0576Iufre7ELQ+9/rwOQUlrADcCdwC3Ad4AycI2U8kTg8V4DfBn4R+CHwAbghVLKRwLHvdc55q3AT4ArgJdLKW/zHiSl/Cx24fly57g/Ad4spfx0Hb+boQGoKI362iHVBalupVG1p+osXr1Fo65CPucxXtHWFlpU7pBxbdEKbrGWiHtmlPSoa4BryKOnWKsojbouiMFRGnVHbpQrLbKgHCqjfV3kSxbpuH8NEK26pmbA2zxW9okIZxqllHMqjVG+Pl2l0W1PdT4vIv4Mz3niYNQ6ojwPY7MFckUrpD11cT+3pJTcf3g01On85ESOllS8ysillmnV0dEMm1e0cO66Za4ZzkPH7NbUG89fy8auFu477J9rVDOMSmn03ga20hgWt2Gvo/pcDDlB9D3taXram9yi7Zx1laJve08bBwZn3ILzxHjGV5CtbLNnGqWU7BmYIhWPscXJT6xaQ41Ymt7xLK0h504RiwlWL2viNwdHeKJ3kt+/YF3VMd3taYZn8rYJztplc6psyZBW8v7JLGs6a6uM9aLO/1zzjGD/TkJUNpnUTOViKY31kqhjfnLeolFKuVlKKWr89wHPcWNSytdKKbuklC1SyudJKR8PebyslPLtUsrVUsomKeWlUspfhBxXllL+o5Ryk5QyLaU8T0r53zXW+Dkp5XbnuNOllLfM+5sbGobKDJ2+QqkR2kK969CpuqoiHjTO8XmKRl0zjV63zkSNAOClpmJfH9cW4m6vo2wHycdV0ajjXFSUxlrOe0tN2ZKULOmx8tfVnmoFAu2rbeOXmmI5uIbo1bUjI7MIgeucCLUz6JaCqWyJXNGqamPT8foMtqfGnQvR6Gcayz6FRhkTBWfyloq+Wq2h8cXN77xz9yA3ff4+7gkxqTk5YWf8BYuVWi2Zx0Zn2bSi1W2jfLJvkoeOjrOyLc2mFS1cvnUF9x8e9amDvZ7ZP6VIeQ11hqbzvhgYL2Ht7N72VIBnb7R9J70q+vbV7eRLFifGMkxmigxO5X3vvZVtafIli5l8ib3905zW01azLbPWe0TN8s1V6K3rbOaJ3kmEgBfXcC4dnMqxt3+ac9fPXbCFmRP1T1THpZwKPc75v2AO51RFMlbZ7HLnOhdhpnEhxBejaDQYlppMI7RkNsAaoDHOhde5VNc61Bo6mjS2p7pzfLbxio4NBbdw1Ry5kStaHjdEPe2pQbUToldRgjETutpT81XtqdG2ZEJ14armYaKcgz46OsvaZc2+IiUeYSHvxm0Ei8YFbvCUyhbv/vYTHBicrnlM73jGzaQLQ/0NU0qjPesa0zLTqOI2wKO6RlTI1zJSWez5+PsO20rgPYdGqu4Li9tQawD/Z3imUGJwKs8mxwW1oylhF43Hxrho03KEEFx+2gqmciX29E+539c7nqGnPU1TMk5zKk53e9p1M5VSMjSdq600hsxiD03nScQEy1tsU5eXXLCWy7Z2sdWjFCozl+8/fpLfv+U3xGP22hSqNXZkpsDegSnOrDHP6D0XVUVjHbN86txetmVF6NzhyrY0uaJFoWzN6ZzqXYf39XlyMsvaOeYZ62XHqnY2dDXP2R7rriNeMfDqHZ97rnOpWBSl0WBYanINpDTqnmlUIb5ajXAaIO4i68lI1B25kXaMV/QofBWlUWegfa5U9oR168smhMC5iFhp9BbxEH28g8KbFanWEXlOY9nyqQg6YlCOjMyytdvf/pasI2tssVB5btXtqQtrJT84PMPXHzzBD57or3nMu/77Cd72zcdq3p/1zB0rUhreq/YGkz4Fuq9GKPpiq/GqffR+p3j0ryEXWviEOWCrQm/TylaEEJy7fhm/3DfEibEsF2221b7LttqFmTd6w85orPwMb1bjdN5WwMOcU8FW44NF/NBUnu72tBvx8LwzV/H1my/3xTSc3mPHbnzizv3M5kv8v9ddysWbK4l3Kptw/+A0g1N5dqyZq2gM31ipxzV0vXNuf/9Z1Sqjdx0wtwkOeOZMnedkJl9iOldizSK0hv7lNdu4821X12lCU1F/+yayxGOi6nNlqYnPE8kBpmh8xnP7zn5+smtA6xpUoaSzJTPTAFEX9jr0K43e9lTdSmNbOqnNPbXSDhnTMjPmXUNTMlaztSkK8kW/Y6je9lR9SmNF7XTaUx1Diaha7xRVRjgRFkqKYHtq1C2ZUkqOjMyyeYW/aIwvsuqaK5b58A93M5Gp9tVTAerBNkDV5lWv6npoyFYQj9RQEqWUPNk76apotdYJ+NwydXQFhLWnQnSbCbVm4hYzcmM2X2LXySmakjEe753w/c3Ml8qMzORD2xsrr4vKuVBxG5tX2GrUOeuWcdKZabtwk100rl7WxJaVrdx7OFg0VhQsb1bjoPP9PTWMcOKxGFL6X59zKZOK1nSCy7eu4HfO6OZHb30ul25d4btfKY2/PmCrrztWh5vgQPjGynSuyGS2OK8BzKVbV7BjdTsvPCfciEYVje1OXMhcJAJKeH8dcRv1Eo+Jec10FN5Njb6JLKva0/PmKi42SaM0Gubjc786zJfuPjL/gUuIUpW0mr80gBkPNIbimfFlJGoq2Eq2Q2U6GX17lcJbIOjYsQ+uQf2RLUQclA3O8+GoBynN7am++c6IC6W8a45UURoh2pgJaKD2VJ/S6HcAXGrGZgtM50psDhhtKCOcMIOSU+H+I2N84e4jbki3l4FJFaBewwinztfFwSE7++7wyEzo/b3jWabzJUZm8jUL0UyhssHkXUfU79VssUw6pGiM6m9JrZm4es9FplDimw+e4A9v+Q1vvPXh0GMePT5B2ZL88cUbKZYljxwfd+9TcQ1B51R7DdWF0jEnbmNTl/06VspYOhHjbI9z6WVbV/DAkTFKZcuX0ajY0NVC/1SOQsniM784RDwmarZmhsU3DU/n6a6hTHr52s2X8ZXXXOIWiF5Wttutrb856BSNcyiNQghHXfPETEzMndGouGLbSm7/66tqmuV0O2tTcSFzEXQ6ViY0izHTuBDisYqj7fB03p2HjHoN82GKxmc42UKZvOaWzEZwDPUa4SzWxcZTWofOmcZGUBoL9m51Kh6jUCrP/w1LgLcVMUq7di9epVFH9psi75lT0tWe6lUaU46TbNQbCl5zJNBj/gLKPdV/YR55tEKVGU911thSolS5rcGicYEq33wccgq6MBVwYCrHyraU7zx411Dv6+LQsPMzhmdD//7sdmbZLAmjM/mq+6ES8+BtaUvGY5FvMuWLFs0h7alRbcienAifiavnM/z2nQNc8uG7eNe3n+DA0Ay37xpw58u8PHh0jJiAN1y9lZiA+z0KYC0jHnsN1Z/hR0czLG9JsqzFLoBU0Xj+hk7f6+raHT3M5Et85Z6jDEzlKFmySmmUEr7468P8z6N9vPmabZzW3Rb6e4aFyQ9N52sqk/XS1ZJCCDg8MsuK1pRbvNUiuNm1WAYwSmmcrzVVrQG8RePiKY0LIRmrKOFzOd8uJYsVuWH4LWa2UNLekqlmMXSuI+Ob49NXNGYboE022wDnQs3FLGZL0amsIRWPEYsJbTET/nzE6HPwFP6YCT3PSWXGVJ+TbFV7qoZsQrA/H9I+E5ro3X2DSmO8hrHFUqGKuGqlcWHrmMoVa7aFgj1vCLj5c14GJrOhDpVhYd1zoYrG2ULZzcvzsvtkxQAl7H6wW1xXtqXodIxMwDZsirw9tRTenhrVe7XWTJztnlp7DfsGpnn7Nx9ja3cr33rj5Xz/zVcCcMeuaoX5waNjnLmmgzXLmjln3TLuO1KZa+yfUEpjfUY4yjlVsbGrhW09bbzgrFW+7/3dM3v43TNX8X9+so+f7R0CqJppBPjYT/Zx3vplvPnabTV/1+DnZ6FkMTZbeMqFSiIeo8t5/e1Y0z7vLF9w1MGdR32K84Qr21K84/nbecWlG+c9NrgZe3IihxDV5lZLTdyTnTk8k/fNZUa2hpiZaWxYCiWLT/3sgM+pUgfZQlmbkuNdA+gt1jL5kvv/Ok1o3MgNzUY4qsVJm9JYKtPsFEr6jHAqIe6JRbZrr5ecxzFUXXDoeH16HRF1F9DpRIxkQlNweYh7KkT/nORL5cA8YfSGPNWRG9EW0EdGZknERJXhSS1Xxlp87PZ93PipX9f8rDs4p9KYDzWrsJ1LRV2fGZYlOTQ8ww7HaTKsON3dP4XqHFPRCFXrHJ5ha0BZ0jbTGOaeGsE6ZvMlJjLF0IJtrs+tyWyRN9z6EK3pBF949UVcvLmLLStb2b6qrcrzoVi2ePT4hGsAc+mWLh47PuF+Pp2cYyZOnQuvCn50JOPOM4L92vnp26/mdc/d6vteIQQffem5tKcTfOi23YA/akYVjal4jE+8/PyaURf2OvzF68iMymh86oWSKnbOWFV7nlERnMXuG8+SisdCW18XghCCtzzv9Kr3Q601QOXzon8yS3dbes7ztxQknezMSgEffXuqmWlsYB4+Ns6/3LGfBzw7VDrIFMraswmzDZBNmPFmEzbAOnQb4ahZAW3uqU57atQZX15sdc0plBbZrr3uNTSI0uh1REyG2LVHgS9yo0ZI9tKvodo9FaJvGa5yT42JyFXX4Zk8y1srqlZFaYxmHUdHZ9nQ1VJ1cbdQFfr+I6NM50o8dmIi9P7DqnV0dLbqc2hwKldTkajXcfnkZJZc0eL5jrIUNte4++SUm5s3OFWtNEopOTg0w7aeYNEY/QbPbL4cMONRG5BL/16dayau1tyvZUne/o3H6B3Pcssrn+1Tjq87ezUPHh3ztQTvPjlFtlh2nU0v3bKCglNIgv18rmhNhRqgqGty9brIl8qcnMyyMWDmVIuVbWk+8ofnutds3rnJnvY0F29ezgdvPJttPbVnCaHSJquKV6VeL0ZLpCr45ppndNcR82929Toq8XxziItJ0PW5fzK3KM6pC0XNNLoF/FNsFT7VNcyHKRo10QiOoZYlyRbLDdOeqtUIpwHMX6SU7utC57nIFct0NNlFo67XZ84p2JSSEbXRCNjnwR+toCPqohL7oTNyI+9pOdOW0+g8Hyp/DvQpjV4FGqIt5EtlC0tS7Z4a4RoyhRK941nXgh/snXJ7fVEpjX6Fxl3HAtpTJ7NF9g/aRdqvD1bn7U1kCozMFNi6spVCyXKLErA/H8ZmCzVt8et1XFZK5hXbVtKUjHEkoDROZov0TWS5ans3YM87BRmZKTCZLbKtSmmM1khseDpP30SWMzz5fFF+bqmZuLB8u2SNrN1Hjo9z194h/vaFO3zxEWAXjZaEu/YMubc9eNTe6FfHXrylCyHszYc7dg3w/cdOunmGQYIK9ImxLFIS+jquxQvOXs2rL9/EeeuX+eaaYzHBt974HP74kvlbMoOF0tDU3G6rC2Flm72RdOYczqnedXg3VnrryGhcbIIjBicnFiejccHrcFp1hxexgF/4GkzR2LA0gqKUK5WR0jiG2mvwtKdqek7yJftiUOcawH4+dCuNuWKZZl+hpHeOT1fkRt5tyYxrK5TAVhq9BbSuQHtVuCY0GdBU3FMrBTREu9GkflawNTTKjZVDQ7NIia9orLR5Lf06pJQcHZlly8rq9rN4jeJVSsl3H+3zfdY/6rheNiVj3BNSNKpZQ6UCeltUVfG2qqbSKOoy4znkFImn97SxeUUrhwNtsCrQ/fwNnXS1pkLbU1XhGVQaU/FYpB0SqqC6ZEul+IpSje91lcaQzYQaSqM63y84e1XVfWev7WBdZ7OvRfXBo2Ns7GpxFcllzUnOWtPBf957jJtvfZhtPW188qYLaq7Rq0AfH3OcU+tUGhUfvPFsvvuXVyzoe7xUnhP7fAxOL1576uplzSRigtNX1dcaGjTCibxo9GwySSnpn6zdPbCk64gJypblqr5mptHgo6I06psnbITC1bKku3uvu1BS6FIaMw3gWgq26trhFI06cxqVeyroaRn2ZhPqjtywcxqjNRrx4s1e09WeGlR+Qc8sIXjdU6NXGtV70h93Ea3SeGBoGsB3YRilEc7gVJ5sscyWldXFQa3i9cDQDH/9jcf4yj1H3dseOTZOTMAfX7yRx05MMOOZbYdKMRZWNA446kxtpbG+7oRDwzN0tiTpak1xWndb1eykMsE5a00HPe3p0PZUVdxWtacmou0KuP/wKM3JuM+1cinaUw8Pz4TOmPaNZ0nGRahKk4iHtwsfH80Qj4nQOUghBC84exV3HxxhJl9ifLbAg0fHqxTJy7euYGy2wB88ax3feMPlcxYd9hyffS6OjvgzGutFCPGUWjgrm272+Riess1flEr4VHjdc7fwX6+7tK58wqTHKyBXtPMtn6pz6kLxGjVNZUtkCmXWRhy3AZXXhdoUMjONBh+NULBlG2ENPqdO/edC5zp8aqfm9tRGUBqbEnFthiegWjIrSqOuQkkIu0DQqzQ2QHuqR2nUNd9ZCLanxqJvGS54WpYVUcegHBiaIRkXPoVkKZ6Th4+NcUfAiAQqxVuY0lgr7kIZlPz4ycrjPXx8nDPXdPD8s1ZRsiQPHBn1fc/BoRlSiRjP2rictnTCnW+EStFYy5rfa6E/FweHZtjW3YYQgi0rWzk+lvH9Td7dP0V3e9r9b7iG0tiSiletJeqZxvuPjHHhpuW+OVMVj7OY63jTVx/hHd98rOr2voksa5aFz8TVatU9PpZhbWdTTeOT685eTaFk8davPcqV//wzxmYLXH/uat8xb3ne6Xz5NRfziZefP2+x5N106x3P0pKK09X61Iu1haBaMt2Ih+k8K1pTixImv7ItzaVbV9S5jkp7qnp/hrUWLyXeza4TTrzKhi4NRWPM/rs6PJ1HCFixCAX8QjEzjQ2MNxdQF7Mq3kFjNqG3aGwUIxxdRXS2AdZQLFsUy9ItGnW9PnNFi+ZUXJuiBEpp9Lqn6purFEK4M2P6W3X1uaeq5yMeE8REI7inRl/I50OUxmQ82siNA4MzbFnZ6rvQDpp8LAb//ON9/M23Hq86v5W4jTCl0d96pxh0irwn+yY5MZahVLZ47PgEF25azoWblpNOxPjNQX/ReGh4lq0rW4nHBFu7/a2jg04IeM321BrK1j/fvpc/+fx97t/cw8Mzbp7e1u5Wyp6LV7CVxrPW2PNhPe1NoZEbh5zHCAu0j2qmcSJTYN/gNJdu8atwlQKlvtdFoWTxLz/Zx8BkuEts73iGfYPT7O6fqmr/7RvP1GxvTAacOhXHxjKu82gYF2/uYmVbip/tG+KaHT385K+v4nln+ltZlzUnueaMnnkjJgBfoP3ITJ6Vbem6vm8xqTgMOzON03m6NShbao4P5jYxWkq8M7dHR8NjfKIgEYtRtiRD03m6WlKRu7eCmWlsaFzH0GKDFEoaXTIVemca9a9jtqC/gFa24brbU1Xsh9ueqqVQKjdEe6qrri3Bjn09SGm3kPvPhZ7C1buLr6OQD+Y0BmeDolyDzwinTqfOxeLA0DSnBxwalcnHYp2LsiXZdXKSqVyJh4+N++47OjpLKhELbSMLXhArBiYrxdaPnuxn3+A0s4UyF25aTlMyzkWbl/ObwFzjwaEZTnNaPresbPXFYfRP5mhJxWlPJ0LXn6gRufGr/cPce3iUuw+MuEY7p/W0uj8DKrEbhZLFwaEZzlprF42rOtIMT+erXFzDnFNh8T+3jo3Octk/3eW2w3p58Og4UvrnGcG7sVLf6+K7j/XxqZ8f5DuP9oXe/4t9w4C9sagu8hUnJ3I12xuTNeY7T4xl2NhVu0iIxwRfv/ky7nr71XzqFc/2mfycCl4FenQ2vygtoQslEfAKGJrOaTFe8RbyvY6JUdTtqWpTo2xJjo3amzVzbSIs2Toc34ShKT0ZjWBmGhuaRlAaG0HZaoQgeXsdldZQXQWbak8VGhQUhXo+OprsCyF9SmNZu/mLXaRU2hB1tac2VQXJ6ymUKpEbetpTvUojKJMPvZEbiQidIRXBFllQrU3RnItcsczxsUxokRK00H8qHBmZcTfSfr53yHff4eFZNq9oCW1DrNWeOjCVY0VrinPXLeNHOwd4xClEVZTFFdtWsndg2nUvzBXLnBjPuI6kW1a2OvEY9pruOzzK6atqB5gnQwr5siXdOcnP/OJQ1SziVqfd9ogTu3FoeIZC2eJMV2lMU7IkY5mC+5gz+RL9k7nQ52Ox36v3HBplYCrHgyFRYfcfHiWViHH+hk7f7QtpT7UsyRd+dRiAnScnQ4/5xb4hd8NEzXuC/b4YnM6FziZCeBE/nSsyNluYt0jY1tNeV+ZfPXgV6NGZAiueYibhqeCd4wPb1EmLW6fn72rfeJZ4TNScEV6yNXgK6KMjs6zqSNOSCt8IWtJ1OMZZwzN5eiI+B941zIcpGjWhihTTkmmvQQj9Rjhtzo6xruJVnYuOpqQ+A5qC/XOV0hj1Rbki77anOu6UGs6HKlxBZ0um5SvWQEM2odMN0eQ5F7pyGv1KY3i72ZKuoegv2HQ8J2HuqYl4fU6di8Gh4RnbOTXEHXExN1ee7LOLhrXLmvhZoGg8OjrL5hqOk7UMowancqzqaOL6c9fw+IkJbnu8n1UdaXeG6orTVgJwzyFbbTwyYjvEugVddxtSwrHRDHv6p9jdP8UfXLC25vrD5qB7xzPkSxY7Vrdz7+FR/vthW01T7anLWpKsaE25SqPXBAdwLya9sRuHnCL0tJCippa6dqrscgq5MKXxgaNjPGtDZ9VM31wbfz/fO8Q3Hzzh/vsX+4c4MDRDR1OCXX3VRWOuWOY3B0f5w2etIxETrrMs2KHsUsL6Wu2pIUX88TFbWdq0QCOap4LXCEe1p0ZNwjPHp7IBdeQCev+u9o5nWN3RtChzlQtag9qMtSyOjWYW7GS7WMRj9rkYnsrRreE1AaY9taHJuIH2Ot1T9RuvqPPQnk5oN8JZprklU+2qd7Yk9T0fzmZGWzpBPCYolKN/fZYtSaFsNYARTmWmMaUpcsNbuAoh3GH5SNcQ4hiqYw46qDTqCC7PlyxSzoypWgNEq/5W3FP9rbpRFdBKKQvLolvMQv6J3kmak3H+/IrNHBia4YRzgV+2JMdHM2zprlE01lDkBxwr/RedY5uYPHDUNm1Rz+U565bR0ZRw2x8PBoqxrW7r6AzfebSPREzw4vPnKBpj1a26B5xMyPf+3pl0NCX42gPHSSVirF9eKVrU7OREpsCnf3GQlW0pt211lXNh743dqKiV1efDzias/316cGiaX+wbqnm/KmIPB7Ikp3NFdvZNVs0zQmXGNOy9+plfHOJd336Crz1wHIDP/+owa5c18RdXbuXoaIapXNF3/ANHxsgWy1x39mq29bT5isZHj08AuKpskGQ8hiXxba6o11SU7YhqY6VsScZmC5raUytt9UPTOSxpR2VETdKz2XVsLBNp8a7wxjcdGZ1dsJPtYqFa+4c1FfBglMaGphHcUxtBaVStPsta9Klr0BjZhFmniO9s1nculNrZ7MRd6CqUgAaYafSbv0TdFqrW0JT0K0pRR264z4c706gn+iOoNNbrTrm4aygH2kKjf33OOrEQzSlPAR3huTgwOEM8JkKVvsQCPzOCs3ledvZNctbaDn7XMR35uVPM/OjJfgply1Xfqtcwt9K4eWWr+72qNRXs2bU/fPZ6vvNoH3ftGeTg0AxC2EUcVMwxDgzZRePvnNEzZ2thWCF/wClEz9/QyZ89ZzOAa7Sj2LKylUNDM9x868P0jmX5zKsudO9XNvxepfHg0AyJmAhVSBY60/j+7+/iLf/v0dANobIl2TtgR60EsyQfPjaOJQl1zZxLje8dzyAEvPc7T/LJO/dz3+ExXnvlFi7Y2AnArr4p3/E/3zdEOhHjsq0rOHNNB3v6p937fn1whM6WpDv/GSSsldydYYtSaYzZr4vxTAFLwoqInVOh8pyUytYpx34sBvFYJXLjxDyGREuFMpibyhUZns5rVBoFIzN5imWppVXYXoOZaWxYGiHuohGKRrWGZc361DW1Dt1Ko3suWlLaZ0ybknZrqK62UMDnnqotZsJjeKJNafQWSvFY5M9JTrWnJivtqRB93EWV0piIXmkseNRn8DvvRcX+QftC2duOGOWmxv7BaTavaPG1x7rrcAKq6+Enuwa44B/u4NZ7j1bdZ5vgTHHuumVs7W5j84oWfrZ3iPHZAh/4/i7OX7+MG84LV/kqSmPl9ZkvlRmdLbjzUr933hoALty03Pe9737RDs5a08HbvvEYvz44woblLe7rvi2doKc9zTcePMHwdJ6XPnvdnL9f2JzpgcFpVnc00dGU5M+fs5mmZKxqFnFrdxujswUeODLGx152ni8TUBlkeJXGg0MzbFrREuq2uJCZxuHpPPceGmU6X+JkiHPp0dFZJ8OuqSoW5P4jYyRigmc5xZ6XVI3P8GLZYmAqx2uv2MK565bxb3cdoL0pwR9fspGzncJvV2Cu8Rf7hrn8tBU0p+KctaaDgakcY7MFpJT85uAIzzltRc3YgLB1HB/L0NmSpKMpWccZWhySTtfK6Iw9l7pSyyxhZbPrmHIM1VAsJZ3Ijdl8iZGZQqTFu0JtJqg2bx3nAey/7RMZW1nXZYRjlMYGRrWGap1pzOs3f6kYryQ1t6eW6GzRGzOhisbO5qS2uUpvwZZKxLWci6xH2dI50+hVGpNxQdHS0JJZVaRE14aoUC30TYFA+6hfG/bz4WnJ1GBO5HWRBa97anTnYtfJKdZ1NtPZUlEoajl1LgUHh2aqnFO965jvObEsyb/99ABvuPVhMoUyH79zP9OBNsTDwzNkCmU3JP6aHT3cc2iUv/veTiazRT760vNqFgcVpbHynChlbvUy+2Lsz56zmY/90XlcEDBtaUrG+eyrLkRiq2fVBV0rfRNZljUnufbMnjl/z2RIIX9gaMadBV3Rlua/XncZf/vCHb5jlDvn37xgOy+5wF+YNiXjLGtO+mI3Dg6HO6eqNdT7d/X2XQOol9D+gemq+1Vr6g3nr7VbhMcqauPDR8c5Z92yUAORWht/A5N2W+TpPW38x59fzLM2dvLW551OWzrByrY0a5Y1uXOtYM+YHhmZ5Zoz7POu2lD39E9xeGSW/skcV2xbWfP387YhKo6PZdgUsbqViNvRCqMz9nO4olWPaynY75GjoxmScVEzb3QpUZ8XxzW0CbtrcD5HDjpt3jpaZL3rgEpHQeRrMDONjUtDtKf6nEv1tmQu09iSKaUkU2wEpbFEPCZoa0roK+IdI5yWVJyUNqXRMRtJxrQVKKWyRdmSFSOcWAwZmIeJgnyx7Dd/0VAouc+Hq7rqif4Im2nUUrgGDGgg2vbU3f1TVXNbYSYfS0G+VObo6CzbQ0xwYH73VCkl7/zvJ/jkT/fzh89ax9dvvoyJTJEv3n3Ed5wqFs5dbxeN1+7ooVCy+OET/bzx6tNqzq3Za6guDlRG4ypHaWxLJ3jZRRtCnU83rmjhEy+/AKg2+9niuJu++Pw1vs2D0HUEWsktxznVW3BfuGk5GwIXylef3s0P3nIl/+uabaGP29Oedn+fQsk275i7aJR1bXb98ImTbkbevsHqonHXySmSccF1Z9vtwgeH7KKxWLZ4om/C1+rrpdZ7xM3lW97MirY03/nLK3jdc7e695+zbhk7PUWjctCtFI32edzTP8U9TlSKMjMKX4dTvFp+pTF4/pcaN8TdKRq72zXONDpK44blLZEb0Kh1FC1Lb9Ho/N5qhllb0Rj3Fo262lNN0diwNELR2EiRG8s0qmv5koWU9lwl6CugM4UyLc4sYUGTQZJ6PpqTcVIa2v/Ao3Y6awB9Ie6uupZokDk+DYWSd8ZUrQGib08NOxeRx48Uy762zKjbp7OFMoeHZ6rmthJxgSXnnhFcCFJKbt/Z7z73iiMjs1gStoWY4IAyf6l9Lr77WB/ffqSXN1+zjY+//Hwu2tzFi85ZzRfvPszYbCVGQpngqBbcS7Z00ZZOsLW7lTdfG15MVdZQnZ054BRZq+tUU55/1iq+fvNlvOGq03y3q+LsD561ft7HSMT8Le19E1myxXKo66yXWExwzrplNaM8ejrSrtK46+QkZUuGmhIBns/PuV8XQ9M57j8yxh9duJ7VHU1uC7SX3f1TbF/V7v6sw04syL6BaXJFK7Q1FSozY8H3SN/43GHu56xdxuGRWWbzJaSUfO2B45y9tsNtYVzRlqanPc3u/il+fXCEdZ3Nc17wpwLFa6ls0TeejbxIUJsJqj1Vh9KoNlbsQHs9BjSg2lOla0i0aY68zKVCFWuDU3ZmZnuErcq+dXjmCfW1p5qZxobFuKeqNXhmGnXPEupWGvNlWtJ2oaTr+fDPNEY/PwfeIkXfTKNag6uu1bjwiWIdwRk6HcUaVGYadTwnUsrQecLojXCsqhlTiK6A3jc4jSWpMoFJhqgoT4XHeyd541cf4fuPnfTdvt9x/zy9hrI1lxHOwGSO939vFxdtWs7bnr/dLYre/vztZItlPvvLQ+6xO/smOXtth7vznU7E+fJrLubLf35xVaRD9Rqq21MHnBm9hWTAXbZ1BV0Bk5KXX7Sez//phTy7RoHkW4czr6U4MGQXYrXOXb2sam9y221/+EQ/ybjgd7aHt8rW2xVw+84BpLRnPU9f1VZVNEop2X1ykrPWdNDelKSnPc0hR2l85Lidd1mraIzFwl2fldJYK1fxnHUdSGkXq786MMKBoRn+4sotvmPOWtvBrr4p7jk0ypXbVtYstKHaVbd/MkfJkpGrWwmnK2BkJk88JtzrjkjX4DGLOj46q838Rc1iHxvN0NGUcDfuoyTpKZR0nQeoqHytqTit6ehzIsG0pzY0qi1Tp/nLbIMojalEjHQyrsXGHyrFc2ezfYGgTWkslmlJJRylUW+7sD3TqC+bECpmPBB9XqQqlHTm8al1eN1TdcRMVCuNzpxphOsIFq6gJzszUyjRFNqeGs061FzZ2UGlsUag/anymFMI7PZEGgAcHJwmJnAjIIKogOogUkre/T9PUChbfOxl5/vaoE5f1c4fPGs9//eeozzRO+Ga4JzjzDMqLt7cVddFnToX3nUMTuVIJ2JP+QK9vSnJC85ePWdx4q4j0J6q4jZqtZLWS3dHmuHpPGVL8sMn+7l6e3fNi+16N3h+8Hg/21e1sX1VO2esaufA4Izv/A1P5xmZKbivu9O621yl8dHjE3S3p2sqhmodVe2p41m629M1NwHUPOvOvkm+ePdhetrTVeZHZ67pYN/gNNO5ElecXrs1Farfq65zasTqltcIZ0VrilgdLYGLjSqg+ydzzBbKWmMmipY906jDBAf8LZm6FFeo/F3tWcDG1mJjjHAaFDVDB/rbU3UajQDkCmUn3kFP+x9U2nTbmxIIobGALpTclkxLRpv9VlmDc3GesOcJdcxW+tpTNZquAL7IDYj+OfE6uKp1RF24VqmuGtpT80V/EQ8LjxNYDI6M+G3ho46E2XVykvamhBtIr4gvctH4eK89S7YnUDTu7p9iy8rWmhf6iRpund9+pI9f7Bvm3S/cEVpwvv0F2+lqTfHSz9zDh36wm2yxzHnrl1UdVw9hMSgDU3lWdTTVVewtFkHTqgNDM3S3p30GRqdCT3sThbLFz/YO0T+Zq+kiC5XPrbk+Pwcmczx4bMx9nO2r28mXKnNmYM8zApy11n5OtnbbsSBSSh49Ps6zN3bOrfKFzMf3TWTnLDR7Oprobk/z3Uf7uPvACH/2nM1Vjr3e2dbnnFYd9+El+F515+iibk+NOUY4s/k5I1uWEnXdpxxDN9XYBFpq1Lk4MZbR0poKlXMB+pxToRJ30a3pNWGvwRSNDYmaoVP/r4tMocQyR13T2Z7a4olW0FGwqfZUtY6FhCEvJrP5Mq3peN1zKEtBtlgmFY+RiMe0KY1Zj7Kla6YxmE2oQ12TUjqRG4H21IjdU3OBAlpHe2quVGlZVkSdWTmZKTIyk/cpRRWFLyKlsX+Ks9Z0VF2gL7aL62MnJgDYOzDt6/54oneS89d31vy+WkZNP3qyn60rW3n15ZtDv29dZzM/+qvncvX2Hr5yz1GgojQtlIpLZuVcDE7mFtSauhgEz8WBoZmn3JoKsMoJ/v7Srw+TTsT43bNW1Tw2OMcXxm2Pn3RbUwHOcGYW93kcVJXirMxnTutuYypX4uDQDEdHMzyrhglOZR3Vrs99E1nWLZ87UP6ctR083jtJUzLGKy7ZWHX/Wc56dqxuZ+U8F9vBqKBjY7Ok4rHIXxdxx4l7eKbAyrboTXCgci4ODeuNmYjH7M2E3vFs5IZECiGEWyw1gtLY3aGvaDQzjQ1KI+QjqnWomAmdkRs6DU+g8nw0p+KkNbaGZoplmp32VNDz2sgVyzSnVIj7M3emMag06lDXSpbEkviURh3tqfmiv2CLuiXTXkO10hj1zO3BYfsi2ls0xmPRnYuyJdnbPx0aXl4r0P5UmMgUODIyy7rOZiazRddEZnAqx9B0vqpt1LcORzkIcmBomrPXLZuzFW95a4ovvPpCPvDis/iDZ61ja/epFVhh52JgKseqiCMFvF0BUkoODk7XNKxZCMqO/77DY1y7o4e2Oeaf3M/PGu8TZTBz4ablrumQen0f8Mw17jo5yaYVLa5JyNZuu8j49iN9ADwrEF0Stg7viIFlSfomsqyfQ2mEysbBS5+9nuWt1QXWlpVtdLWm+N0zaxfOlTX4N/5OjGVYv7y5LnVlMVHmL6Mz+XkL3aVCbXYdHpklHhNzKr5LSTIumMmXKJQtLc6pCvUa0Ks0Ou2pmkxw1Brma8YwRaMGfAY0uotGzeYv2ULZF+KuJxfQfj5aUgktgeHuOgolWpJxks6Fcb4cvUlS1mkXBhylUUOgvWd+LRlx+58iH2jJTCyyklMPuWKIuhYSGL7UBOc7o27JhHClMRmx0qgs2b1FoxDCbpONYB1HR2fJFstVJjiwcKMmpWKH8YTTmvqyi2yH0L39dvHwpHP7XG2jCUdF8ZIplOgdz9alsgkh+PMrtvDJmy445Yv5oOGJlJKBqRyrI97B93YFnHRmx57qPCP4LypffH7t1lR7DXO/Lu49PMrhkVleeWlFxWtNJ9jQ1eyL3dh9csr3ulMF5nce7SUeE240Ss11JPxtyyOzeQola16l8crTu+loSlQZ4CjiMcGdb7uKv3re6XM+Dng3/ux16JqjU+YvIzN5VoQUwlHg7exa19lc1fYbFd6YD60qXwMUjeo50ZXRqJhvrtEUjRpQM3RNST0zY951uIH2DaI06m5P1WlCM5u3W3XTGpXGrEdpTOrKafS8P3TN3FYKV1UoqXVEWCh58ioVOlqGc8UyQlSKRR3qby2lMco1HByaIZWIsX65/+LGDqhe+nXsdufK5lAa6yjkZ/MlXvOVB7n8I3e5VvdeHndaU1920QYA9gzYP/eJvkliIvznu+sIMcI5PDyLlE/dAKZegkrjRKZIoWS5GY1RYbtk2mtQqt1itKf2OMVvSyruZhbWYr7N2P+6/zjLmpNcf+4a3+1nrGp3HVQPDk1zdDTjKwzXdTaTTsQYnMqzY3U7Lam53R6TMb8j+HxxG4pLtnTx+PtfMKfqvKItXVfR47aSW3Zu5bHRjBZ1KxkXTOVK5IoWKzXm8SlFqRGKNdCT0ahIxGMsb0lqcW9VqE0yXXEbwXXUwhSNGlBFSmdzSmvROFsouUP5Omcam1NxLeqFdw1gG68Ed0SjJFusRG6AvgK6yVUa41pzGpuScYQQjtucnpZMV2mMaVQaE36lUUs+YiLuztHpaE+dyNqZZm1NlYtT70V5FBwcmmHrytaqP6pRqb8qXN0bDu+uoU4lfHQmzyu+cB+/2j9Mrmjx1q8/WlXwPt47wWndrazrbGZdZ7NHaZxgW0/bnAVCmFGTUmgXo2CqB29xAAvPaFy0dXg+t5Rz6umL0J7akkqwsi3FC85a5W7w1SKVqD3TODKT545dA/zRheurjI1OX9XO4eFZCiWLj/54H+3pBH98cUWNjMWEa2hUK2rDi52p6s+sBOZVGoFFMy9SHTyFssVEpsh0rqQnTD4WYyZvdzfpUhqh0p2gs2hUn1uJmGBNxO9PL8m40Bq3AZXPLZ3tqfY65i4L9YSBPMNxi8aWJCedD09d69DdnporlulpT2s1wskGlMa8tgK6ZEduaDTCyRXLNHuiFbS4p5bKJGLCfU1omeMLtGRqmeMrVSuNOmImcsWyL/ZDxwaPKjxO8ygOqYSIdLPr4PBMqAlMVOrv7v4pTu9pD1VVkrHw4iBfKvOW//cos4USHU1Jdp2cYnAqx+f+9CIyhRJv/fpj/NtdB3jHC84A7FbOx05MctV2O77gzDXt7B2YQkrJk31TXL29e841BrMJwZ5nTMSiuyhTFz3lYNGowwjHWcOegSl62tNVuY+nytdvvozutvl/n7m6Ar71UC/FsuRPQgxmzljVTsmSfOOhE/x0zyDveuEZVWs/rbuNvQPTPGvD3CY4UN2eWq/SuJgk3bZlydFRO2NSRzuid9NJl9IIjqNtWW9Lpvq7um55s69VNWpa0wnf3xYduEWjRiMcmD+r0SiNGnBzAVuS2pTGsmWHZbc3JYkJjdmEjntqIxjhtKQSzsB+9GsoW5Jc0fLHTGhuT03rck8tWIHZtehnKytFY8UUCKItlNRudKtH2dERM5Erlt3zAHoK6ANDM3S2JH1ugyokOwpyxTK949nQC4vFVjx39k1y157Bqtt3n5yq2RoadIZU7O2f5o7dgwxO5Tk4NENLKs7/e/2lPP+sVbzkgnW87ML1fOrnB7nn0Ahgz96NzOS5wDE22bG6g0PDsxwfyzAyk+fcdbVbU9U6gu2pBwZn2LyyNbK5qUTM//ocnLSLxsjbU51zIaVkT/+0Lx7iqbKtp72uVrpaRjiWZRvgXLqlK7RtWBn2/OMPdrO6o4nXXlE9U3ha98KURl976kSWjqaEa6wTBclE5XWhMho3r9TTnqpY2arTKVM5hmqc43MKeZ2tqQCf+9ML+dsXnqF1DZtWtLKsOanNlEjx3b+8Ys776/oUF0KsF0L8f0KIe4UQGSGEFEJsDhyz2bk97L/OwLFNQoiPCSH6hRBZ53GvCvm5MSHEe4QQR4UQOSHE40KIl9ZY4+uFEHuFEHkhxD4hxBvr+d104G1P1R1o78ZM6JxpTMWrnM0iXUOhhBD2/Fo6EdNkxmO/JryRGwVtRjh2kRL8Qx8VuVK5KtA+6nUEA+1rXZQvJWrebH1X5Y9I1DETYM9WBp8PiLZoPDhoxxV4W9UWezNhOlfkRf92Nw8fG6u679DwTM25vFrZhKfK339vJ2/9+mO+4qt/MsvITN4NVw9bA1BlQqPMTL7w6ou48+1Xc/tfX8WFm7rc+z9w49lsWdHKW/7foxwennHnGZWiumNNO2VL8j+OS+a5c8RtgK14BtdwcJGiJuolFhPEROW9qpTGqItGpf7mihYHhxa3aKx7DTVmGu87PMrxsQyvuLRaZQTbHTUm7M2zt79ge2gu5x9fspEP3nh2aO5m1Tpi/s2u3vEs65ZHn48IlaJRCKrmkyNZh0dRW6EpcsO7js1a21Pt94iuuA3FjtUd9ET8+RDkmh09PPa+50e6kRLG5nnez/Vu/W0DXg6MA3fPc+xHgMsD/00HjvkS8HrgfcANQD/wEyHEBYHjPgR8APgU8CLgPuBbQojrvQcJIV4PfA74NvBC4FvALUKIN9X5+0VK1tOeKqWeQHtvzEQqoc+QJ+cUKbrn+Jrd+Tk96poq4psdtRP0xKAEIzd0qK52O2TlIiUVF5GvI6g06lDXVPj0Bs+FjQ4lPF8KPh/Rqq5SSvYPTbMtMMu32LOuT/ROsqd/il/uG666L8w5VbEQ99RcsczH79jnmowE6R3P8OjxCWbyJd8xDx0dB+DCTeGtgJW8yKDKN006Eau5k9+aTvDFP7sIgD/90gPcsWuAVDzGDjf/zi50/vth2yUzzLnVSzwmKHvWkC+VOTo6G2nRCI766zwng1M5VrSmIneIVBflewemKJalm3EYJbXeq999rI+2dILrzl4d+n1NyTin97Rzxqp2Xvrs9aHHrO1s5s+es7mumcNkwj+L3TeejVxRSXrMoo6NzrJ2WXNoMbzk6/C0p2otGh0zHJ0Fm6t2ai4aG4XFmt9dSuqdafyVlHIVgBDidcAL5jj2sJTyvlp3CiHOB14BvFZK+WXntl8Cu4B/AG50busB/gb4qJTyX5xv/7kQYhvwUeBHznEJ4MPArVLK93qOWwt8SAjxRSllsc7fMxIq7an2B0a+ZLmFQnRrqChbutQ1KaWTTRjz/HHTULAV7RZZsOeTtM5VanaSzXpnGjW9LoJFo44YlLwT8ZB23VOjf30eH82wsi1NqyeHLRkXkcQ7eJnMFn1ZcGHh6UvJ6GyBiUyxqvBY7A0e5U560Am89nJoaIaYIFRVqdc9tVCy+F//9Qh37R2idzzLJ2+6oOqYHz7R7/7/Q8fGXXXqoaNjtKTiNYu2YMyEYt/gDKd1t83piLe1u42vvOYS/uQL9/Hdx05y/oZOd7Nk84oW0okYfRNZdqxun9d4JREooI+MzGJJ2LYIBjALwfucDE7lI1cZoVKkPNlnR5VoURoT1ZtduWKZHz85wHVnr56zaPr8qy+kKRlflBzDZDzGTM6+7pHSzmi8/LQVT/lxF7oGsM/F0dFZbQYwcee92t6U8LX9R00yHmNNR5OWwlmhNlZ0t6ca6qeuSkVKuZhXBzcCReAbnscvAV8HrhNCqCbv64AU8NXA938VOFcIoZrsLwe6Q467FVgBXLmIa18UMsWK0gi61DVH2UomtMVMFMuSsiVt11KNc3yZfMkTMxGjoMGAZjbvL+JBjxGOikABNT8nI2+fDmuHjL49tZYRTnTn4thY9YVNlHN8iqMj/jyzpWhPncoVQ+MfwOs86S8aE3GBJQkNkz8VdvfbReOhodmq+w4Oz7ChqyX0AisRm794LZYt/uprj3LX3iHWL2/m7gMjWCHr/sET/Zy3fhnd7WkeOTbu3v7QsXEu2NBZ0ywiGYiZUBwYnOaM1fMXbOeuX8bnX30hqXiMiz1qZiIec79fBa3PRdAIRz132yI2mfCa0AxM5iJ3TlVrAFvBTiVibK2jjXOxCXuv/nzvENP5Er//rLkzHjetaF20Ytv7d3UqW2ImX4pcaay0cNtxG7pm+dQ6utv0G57odgxVr0/d7amG+lkKeesjQoiSEGJSCPF9IcS5gfvPBo5IKYNXCLuwi8RtnuPywMGQ4wDO8hwHsHOe4xqGbMHOPeto0lk0ehxDNatrzT7HUD3nosWZ49N2LoqV9lTdrbpNHtUVop8zzXkKV3AuOCLMRwRbaUwlYm67iBsMHWHkxvGQHLGoTYEyhRIDUznfBW9lTmrx1vHxn+zjjz8f3qBycEhl3AXbUxf3M0MpjUdGZqsK84NDMzULH1sJr30uimWLv/7GY9y+a4D33XAWf/272xmZybN3wN+iemx0lif7JrnhvDVctGk5DzmzlTP5Env6p7ioRmsqhEduTGaL9E/mqortWjzntJXc9Y6refsLtvtu3+EUjefNE+Bur8M/c3vQUWi3dkd7cZqIxyhZtl/AycmsFqUx7jwnT/ZOsn1VmxZ3yDBTte8+1kd3e5rnnLYysnV4W8l7J5xZ7TriNhYTdS7GZwuMzha0zfKpDR6drakAv3/BOv7owvDW46i4dkcP73rhGfO2vRsah8X8FMtjzxW+AbgGu7X0XOAeIcSZnuO6sGcjg4x57ldfJ2S1zBF2HCGPGTzOhxDiZiHEQ0KIh4aHq2dYlhK7SKkoSqoVLuo1gOaisejJR1yCC9GFrMM3x6fVwdXjnhqxEY5y1PUqjRC94pkNm2mMPKfR8gfJx6I9F/lSmf6pXEjRGO25ODqiXAa9RePit6fuHZimbyLrGhB5OTA0Q3s6waqAFXktde1UyBXLHByeYc2yJgplixPjlSikUtni6EimZjh9MiZqbibkimXe9NWH+eET/fzv63fw2iu38NzT7Yv1uw/4/+78wGlN/b3z1nLhpuWcGMsyNJXj0ePjWBIu2hz6pwzwOoZ6Cza7KD1jAa2hG7paqnIY1VzjOXUojcE8voNDM2ysodAuJYmYoGxJDg7NMJEp1lXwLjZqdu3A0DRnrtZzUZwMfIZPZor8fO8wLz5v7aK0nS5kHerzwo3biLhoVEW7mk/WpjQ6f0tWaHROBXjb87fzUs1FY1drir/8nW3EInwtGp4ai1Y0Sin7pZRvlFL+j5TybinlF4CrAAm813OocG4LEnzVLOQ4ahw713o/L6W8SEp5UXf33NlTi40daK9XUcq67qn2OnTMrnkdXHXGTKjYD9CnNKr21JZUvBJCHPE6cp4iHioX5VEbr+SKlm/WQ09Oo96Yid7xLFJWBy8v9rmwLMkn7tzP8dHw1lCVZ7YlRGlczHUoC/yw3NoDgzNsW9VWZRJQK07gVDgwOEPZkrz4fLtlT11YApwYz1IoW5xWo2hMxAXFECU8Uyjxuv/7ED/dM8SHXnI2N191GmC7eJ6xqp27D4z4jv/BE/08e2Mn6zqbXcObh4+N89DRcWJi7mgDVwn3FGz7ndbQ7U9xnvAPn72Ov7/hrNCMyiBxp1hTHAgxMIqCRExQLEt+5ZzjK7dFp6q5a3CeE0vqmWcEz2e481790c5+CmVr3tbUxV9HRY3vm4g+oxEqGyuVolGv0riyXa/SaDCcCkvaLyGlPAH8GrjYc/MY4erfcs/96utyUW0nFHYcIY/ZFbi/YcgWSrSkvEqjfmVLp9LYlNSf06h216NWchSqPbUlldBWQKvno1JA21+j3lDIF6sjN3QojWExE1HNE6oiLqg0qjm+sHm4U/o5Yxn+/a4DfP/xvtD7j4xUh2Cri6/F6grIFctuLMLJiVzV/QdqRDaoi/JgxEMtfrZ3kNd8+YHQGcjd/bZZyYvPqy4a53JOBef1GbKGT965n3sOjfAvLzufP718s+++556+kgeOjrkt+oeGZ9jTP8UNzs8/e+0y0okYDx0b56FjY+xY3TGnFbtrTuRZx76BaVpS8ad8cd7ZkuIvrtxSlxrgjdwoli2OjMzW3R67mKiMxF8fGGbLylYtM1PePD5tRWPg7+p3H+1jy8rWuuZTF3UdceH+HTk0PEN7U4Ku1miLJvUZfmhYb9EYbxCl0WA4FaJosg8qhruALUKI4Dv2LKBAZYZxF5AGTgs5DmC35ziozDbWOq5hCAba6ygaZxuhPdWzBjenUZPqqltpDLYLQ/SvC/V8NAWURh3Fq3em0VbCo22RnS2U/A6u8cUtlMAuYv7+u8FRbJtjjsK3MURphPoLpflQSuLJyepiDeyicVWH38HVjqapzzG0Ho57DHCCSuP4bIGRmXzVPCPYbctQf8vwf957jJ/vG3ZnF73sPjlFayrO2Ws7WNWRXnDRGJbfec+hUS4/bUXo3NBzt3dTKFk8cHQMKSX/+tMDxGOC3ztvjf27JWKcv76TB46M8ejxCS7aXHueEcLbpw8MTXN6T1ukrV/xWAzpmBMdG81QLMvI4zbA3tjIFErcd3jMbQeOfg2VyytdM1uVUQeLyWyRB46OccN5ayK39vdu/O3sm+KctcsiX0Pcye/Mlyx62tNVbdhRkXCVRlM0Gp5+LGnRKITYCFwB3O+5+ftAEniZ57gEcBNwh5Qy79x8O3YR+crAw74K2CmlPOL8+15gpMZxY8BvnvpvsrjY7amaoxVUa2g6QSoR1xpo7z0X+pRGr3uqDgfXStGoyz0153k+QK8RTlPACCfqFtmDQzM+dW0plMbvPnqSW+87Rv9kdUvm8bEszcl4lcNecpFdXFVbaH9IWyjYRePmkNmfxVR/j45U3Er7AutQ8RfbQtSqWjETYWQKJe45NArYweZBdvdPceaaDmIxwWndbb7YjXsPj7J5RYtrXFa9juruhEyhxN6BaZ69MbzYu2RzF6lEjF/tH+a/H+7ltsdP8vbnb/cZtly4eTlP9k2SKZRr5jO6awiZM903MPOUW1MXilfxVDOVtYrtpV7Hg0fHyRbLWlpT1RoA1i5rYlmLnsDuSgu35OFjY0hJ5FEXah2lsqRUttjTP8U56/QU0ZVAe32uoW57asRKq8GwGNS91SKE+CPnfy90vr5ICDEMDEspfymE+Dh2EXovMAycAbwHsIB/Uo8jpXxMCPEN4F+FEEngCPAmYAuewk9KOSSE+CTwHiHENPAIdmF5LfASz3FFIcTfA7cIIfqAnzrHvBZ4i5SyUPfZiIiM256qp/3PXkNlfk1be2ohzAhHzzqaG0ZprLwldbWnVhvhRD/T6G0NTSWibRnOFcscGZnl985d496WWETTFYVq/bz30Ch/GAjQPj42y8aulqrd+IUUSvXgKo0hbaFgF3QvOHtV1e1qZmwxUIVrWzpRpTS6cRshhUew9W4u7j4wQqFkkYrHuPfwKK+/aqt7n2VJ9vRP84fPXgfYRc7/PNKHlJLZQpn7Do3y6ss31XzssBzRJ3onKVuy5hxicyrOJZu7+NGT/XztgeNcvnUFb7za31TjdUu9eA4THPDHCQCMOQpt1EWjN0B9T/80QugpGuOxGGOzBeIxoaVIgsq50NWaChV1rVi2eODIOMm44Fkb5t6AWArUZuzB4RnyJasuU6WlQF3r6GpNBY8RjubIDYPhVFiIPv+twL9vcb7+Evgd7DbRNwF/DrRjq38/Az4opdwX+N7XAB8G/hHoBB4HXiilfCRw3HuBGeCtwGpgH/ByKeVt3oOklJ8VQkjgHcA7gePAm6WUt9CAZAplulrTlZnGEMfAKNaQTsSIxwSphNCvNGqa45NSkil6jHB0uacWS6Sc5wPsP/ZRu6d6NxIALUq4lLKqPTXqmcZ9A9NV5hWq/W+xzoWU0i0a7ztcXTQeG834HEvddSyy+usa0ISonZPZomNNX72OVEihdMprGJulsyXJlpWtVes4MGTP5a1dVj2XlwxxDK3FXXsGaW9K8KJzVvOjJwcolS1XdTgxnmEmX3JbCLf1tDGTLzE4leexE+MUyhbPO7O6cPauI7iZ8OjxCYA5L9Cfe/pKfn1whOUtST550wVVbpZKpVy7rIm188wlBjcT9g/aKt/2OjIaFxM1r1WyJDv7Jjmtu01LG6Aq2J61oXPOWdClRJ0LnUUjVD4/Hzw6xnnrO90N0mjXYG/8Pdlrzw6fvVZP0ag2V8I+W6PizDXtnLWmg+0aZn0NhqdK3e2pUkpR47/fce7/DynlxVLK5VLKhJRytZTyFSEFI1LKrJTy7c4xTVLKS6WUvwg5riyl/Ecp5SYpZVpKeZ6U8r9rrO9zUsrtznGnN2rBCHax1JqOa2v/A1vtVHNKupXGllScWEyEtnktNYWyRdmS7oVNKh7DktEZnigy+TKtnj/mOp4T15jI06oL0SqNao4zXVU0Rtequ8cJeT9rbeViLxYTxOeIVlgowzN5ZvIlhLDbH71IKTk+lmFTiHmHKpTCZuhOBdUaOp0rMZ0rht63Jax4XWAh/4k79vHQ0XBPsmOj9u+6trO5SvE8ODTDthpzefW+Pi1L8rO9w1y9vZvnnt7NTL7ETs9co5pxVM+3ymM8ODTDT/cM0dGUmHOmMBHSPv3I8XG2rGxl+RwtaC84ezXLW5J8/OXnh4bPL29Ncf6GTq4+o2fO389eg31+lMnPAVU0Rnxh6o1j2XlyMnLDFYUya3ru6dE6o3tRG6G6i8ZUPMZUrsgTvZPzKtZLRTJuz7o+0TtJSyoe+pkS1TpAnwkOwLaedn701ufS2WLaUw1PP6JPmzW4M3RpjTONmULZpyjpbMmsRDxoKJSCa9A0T+h1cAU9z0muEHRPjd6QJ1+0f1ZwpjHKjZXd/bYpyoblAefSmFi0Yu3IsF2QXXNGDyfGsvSOV8xghqbz5EtWlQkOeELcF2EdpbLFifGMG7LdHzDDOTJH0ZiIh5+LsiWZyZd8tx0cmubff3aQf7vrQOg6jo7OsmlFK+s6m+mbyOKN5j0wOFOzvTFR53zn470TjMzk+d0zV3HZVrtV8d5DlUJ9T/8U8ZhwWznVz9s/OM3P9g5xzY4e92IzDNs9tbIGKSWPHp+YMyID7PP6yN8/n2t31FYxv3HzZfzDS4IebyFrCBjh7Bucpr0pweqIQ+2V4tk/mWNwKq+tDVGt40pNJjgAz97UyTuvO4PnnTl/0b+UJBMxHjgyRsmSXLpFX9EI8NiJCc5a0xFpRqRvHc7P1TnTaDA8nTFFowayhTLNyYRW99RsMJtQY3tqk6d41VGsAb72VNAxT1jytQ3pcAwNzjQGg6F1rAFsl8wo1c49/VPscExRvKQWsXhVs4R/cslGwF/EHKsRtwFeF9envo7+yRzFsuQ5zsxX0ITmyMgsQlQ7uNrrCD8Xn/nFQX7nY79wN2MAfvzkAGC7iY7N+kfMCyWLvvEsm1e0sHZZE4WSxahzzESmwMBULtQ5Feqfub1rzxDxmOB3zuimuz3N6T1tPjOc3f1TnNbd6n4OdbenaW9K8N8P9zI2W5izNdU+F34n2d7xLCMzeZ5VwwTHy3wOkk2eee+5CBrh7B+0TXCidqhUCt+jJyYAOGetHpUtERe0NyU4f72eohUgnYjzv67Z5tsA00EyLjg0bL+XL5zHhXcp1wA4Jjj6nhO16Rb2mWYwGObHFI0RI6V0jXB0BtrPeovGeFxbe2pM4CquOpxLXbUz5Vcao17HbAO1p6qCTYcSPuu4+janAjmNEa1BSsne/mnOXFNdqNRS106FwyOzpOIxrjmjm67WFPcdrrRuqgiKTTVcS4G622THZwv8cv9w6H2qcFVGIf0T1Urjus5m17DLS63Z3yd6JxmZyfODJ066t/145wA97WnKluSOXQO+4/smslgSNq5odef2lBnOzj67bbRWi2O9qutP9wxy4ablbjvYZVtX8ODRMYpli8GpHA8dG/dFIggh2NbTxu7+KRIxwdXb525xDLZPP3J8HLDn6aJCFWtFSyKlZP/gdOQmOFApXh87PoEQcLamAuHG89fy1ued7r5Gnsmoz4wzV3fUdACOag0lS3K2po0Eex2CrtaUtvNgMDzdMZ+oEZMvWVjSLlLU3Ja+bEJnjk9XTqNjeKJ2w1Nxoa09VZ2LtCYXV6+DK+hRf92cRo0zjWqecFt35YI3ucgKdL5U5oX/+it+/GR/1X2941mm8yXOWlN9sZtYwBxfoWRx46d+zWd/eSj0/iPDs2xa0UIiHuPSLV3cd3jUbcs8PjpLTBAayu610J+PYtnidf/5EH/2Hw+459XLUUfRvHhzFzFRnZF4dHS25uxRrQJaFbxfe+A4YOdN7u6f4uartrKxq4UfBs65Klw3r2ipKhqf7LNNM2rZ81fiR2o/JwcGp9k7MM3zPWrh5aetIFMoc++hUf78yw9SLFncfJXfufQ0Z67xki1dLGue+wIzEVDCHz0+QXMyzo4ITWiEEE77tMXwTJ6JTFGL0YZqO3zshD3T2ZbWk4X3x5ds5HXP3Tr/gc8A1Ob0JZpaUwGfWq5TaUzGY1rnGQ2GpzumaIwYr/mL+jDPl/S4pwbbU72zRFGtoTkwxxe1EU5G5VW6SqNzIRpx8ZoplvwzjfEYhYhfF8H5Th3uqY+fmCCViHGG54JbKdCL9fp8/MQkewem+fHOgar7djvFVZjSmFqAIc+3Hj7BE72TfPHuw6Hn78hIpSC7/LQV9E1kOTFmF0vHxjKsWdbsnn8vlWiF+Z+Tf/3pfh4+No4Q8J1H+6ruPzYyS1MyxtplzazuaPI5lyp311pFY1hXgJR2oHtHU4JHjk+wd2DKPccvPGc115+7hnsOjTLuaVE95sxNqplGgD5H8Xyyb4INXc01DSPm29S4a88gf/TZe2lvSnD9eZX4FDXX+Jf/9Qj7B6f59Cuf7TM9gspc43ytqWDPE3rdUx89Ps5565dFrnIl4raLq4opOUOD0qiek0PDs5yjySHT4Ec9J7rmGe01OBvDiZiWCBbFH124nlc4IwEGg2HhmKIxYjLFStHozifpMsJJBdoQNYS4B9sQoz4XmWCgfVxPdmYmXyniQY/6my2WScSEe5GxmPNz9fL4iUnOWdvhK5hSixxof78zz/bwsfGq+/b0TyEEvqJVYV+Uz38ucsUyn/rZQbpaU4zMFPjpnkHf/WXLLq62dDtFozJnOTwC2Gpdrd3wZKy+lsxfHxjhll8c4qaLNvD8M1fxnUf7qhyBj45m2NTVSiwmWNPZ7GtPHZ0tMJ0r1S4aY9UbPMPTebLFMn9x5VZS8Rhfu/84P36yn/PXL2P98hZ+79w1dovq7kqxfmwsQ0sqzsq2FJ0tSZqTcZ/SeN66zpq/41wzt5+8cz9/8X8fYv3yZn74luf6VNuu1hQ7Vrczky/x4d8/h98JcSd9zmkrWLOsiReds7rmz/euo2xJLEuSK5bZdXKKZ2+KfnZMPSf7Bmzn1NN1tKd65oB1Oaca/KiN0Is0OadCZQPyzNXtdc3oLhWve+5WXnbRBm0/32B4umOKxojJujNbCYQQpBMx8roiNzwxE6DB/KVQpiWpV2nMBoxwdBXyXuUX9JgCBfMRo1YaS2WLJ/smOT8wC7bYbbL3H7HnB/smsgwEHEN3n5xiy4rW0Gy5emMmvv7Acfonc/zrTRewrrPZbdVUnJzIUihbbHUKsm09baxsS/OJO/fz8s/dy+6TU6EmOPYa5m/J7JvI8rZvPsZp3W28/8az+MNnr2N4Os9vPGY7YLeOquJ0bWezT2lUcRu18sySier2VNXuesHGTl507mq+9XAvj/dO8qJzbZXvnHUdbOhq5odPeorG0QybVrQihEAIwdrOJk5OZJnIFDgxlp2zlc01fwkU8icnsvzbXQe44bw1fPtNzwk1vXjXC8/gn/7gXP64hupw3vpO7n3P8+bNR/Suo2hZ7OybpGTJSOcZvesolSUHhqbpak2xsi16S391LgDOrtFWbIiWVDzG1u5Wutv1hckrN1tdM64Gg2FxMEVjxMzmnSLF0wKoYgaixKs0pnTFTBTL7vwcqJY3Te6pycp8J2hQGgth7ak6lF+/GQ9EN9O4f3CGbLHMBUtYNBbLFg8fG3fjEJRpiWLPwBRn1jBqsHNE5359ZgtlPv2LQ1yypYvnnr6Smy7ewN0HRjjmzO6BbYIDsGWl3aYlhOCvf/d0Tu9pRwDnr+/kxeevDV/DPOfiyMgsL//sveQKZT71imfRkkpwzY4eljUn+Z9Het3jLEtybCzjFoVrlzXRP5nDctos3TXWsKYPK6DVfOKmrhb+5JKN7ntLqXVCCH7v3LXcc3CEiUzB/Z7NnqLOzmrMzmuCA7U3u/YO2N/7Z8/ZXNO58todq3jFpYvTppb0KOGPOa6hF8wTt7EUxGMxSpatNJ7e0xa5cypUigPQO7tmqPCW553O+244S+sa1HvEtCwbDE9vTNEYMW6Rkq60hkZdoEgpqyI3IHp1LVcou8Uz6JrjU8qvP3Ij8pnGgNKY1KBA90/m6PKEkUf9unAvuINF4wIL+V8fGOHGT/26KqwebHfPbLHMa67YQlMyxkNHK0XjdK7IibGsz0nTt446lMav3HOU4ek873j+doQQvPyiDcQEfP3BE+4xR4btmbPNKyvF0qsu28RXX3cp33jD5XzzjZdzxbbwfLnUHC2ZewemeNln7yVbLPO1my9jx2r790gn4rz4/DX8ZNeAe04GpnIUSpZPafTGXew+OUU6EXMzHIMkYtVK+PHRDPGYYN3yZi7d0sVp3a2cu26ZzwX2xeevoWRJ3v/9XRTLFifGMj4l0M5qzM1rggNepdG/jr0DKtg+mvZM1xnSUcrXLGuipz3afER7HYJCyZ5p1OGcCpX21M0rWoxDZYNwzRk9oS3YUbK2s5lETHDJFj2RHwaDYXEwRWPEZIvKeMVx60xEH3dRKFuULOlpydRTNGZCsgm15zRqUBoLJf/zAXqUxp19/gytpXBPLZUtpkKKObBNcJa3JKtaMxc60/iZXx7kid5Jbg8xurn/iN2iecVpKzhvfScPe5RGVWyEmeCAyuOrvYZb7z3K//nJXn73zB4udeYUVy9r4todq/jWQyfc5/PIyCxt6QTdbQtvFwvm8SkKJYtXffF+EjHBN99wWZXK84fPXk+uaLnGNBXXUrugW7PMLnL6nRbVXx0Y5rKtK2qauaQS1dmZR0ftiI5kPIYQglv/4lI+/+oLfcecvXYZ77zuDL732En+6muPUixLX9D22s5mRmbyPHxsjI1dLTVNcKD263P/wDRrljXN63q6WCQ8hfyTvZP6Au3jgt7xDNP5EtsjdG71r8G0IRqqOWfdMp78wHVsq5G5ajAYnh6YojFiwoqUvOaYiUqhFL1bZ7OvPTX6yI1MwDFUR8yE61rqaU9NJ6JVXYemcozM5H1h3ImYQIjF3Uz43K8Oc83HflFV9ICtNJ6/obOqrc5tn65jHUdHZvnNQbsw/P7jJ6vuv//wGKf3tLGiLc2Fm5azq2+SnGOG9KhTQJ5ZQ2msFbkhpeQTd+zj77+3i+ftWMWnXvFs3/2vvHQjIzMFvus4mB52XElPpX3QbYUMqGv7B6cZmSnw3t87M/TC7FkbOtmyspVb7z1GvlTm2KjKgqwojWDPA54Yy3B4eHbOfMIw1TVo4LO2s5k1y6qVyr/8ndO4+aqtbgEb/B6Auw+MzGukokyBgpsJewemQ42Mloqko66NZwocHpnlPE0FUzIWc6NVtmtyqFSbGsYExxDE+7feYDA8PTFFY8QEixQdLZlVhasb/aEhmzAZVBqjdwxtSsaIxSqW4BCt6jrmzHe1N/lNgaJUO3eetNsBvQqBEGLR50x/uX+Y0dmCq3QpZvIl9g9NV7WmwsIK+a89eJx4TPDyi9bzm4MjDE1XjG5Kzjyjyiu7cONySpa0W1YLZb549xEu3rw8tNCx11GtrgF87YET/PvPDvLyi9bz2Vc9u2qO7urt3Vy0aTkf+sFuTk5k54yymI9kjfbpXc7zV+tiXc1NPtk3yV9//TEOD8+Qisfc37VSNOb41YFhAK6ao2gMtqeqiI7NNWYgg2t5z4t2cNNFG4jHhM+Cf22nrXjmS9a8ip0bj+N5Topli0PDM9EWjc5zotqrz1mvT2mcytmdLLraU9d3NtPdnuaq02u/dgwGg8Hw9MQUjRETdOtMJzXETATm+NKaZhqDbp1h2W9LzXSu5Augdlt1I2yTVeqANww8FY/VFeC+WOzss6MmgipbehHbZAsli8edC2vVCqp4sncSKalyTgXvczL3Ogoli/9+qJfn7ejh5qu2Ykn4weOVMPnd/VPM5Etu66iKRXj42DhfuecoQ9N53vXCHTUfPxmPVc3PAfzm0AjrOpv555eeF9rOGYsJPv7y8ylLyV9/4zH6JrKnXDSqxw86hu46OUVbOlHTdRXgJRes4+9+70x+vHOA/3vPMTauaHHD2Je3JEknYpycyPLLfcOs62zmtO7aawy2p05kikznSnUHZwsh+OhLz+Wed1/rm//zRmPMp1YlYpVZQsXRkVmKZel7Ly01Sl1TSrUulU2dj+72NMtbo3dOBejpaOLB9/5uVe6lwWAwGJ7+mKIxYjLB1tB49O2pag2twfZU3TETGub4esczPlt9HQX0rpOTxGPCpw5ErTTuOjnJlpWtvgIabBOaxVJ/d56cdF/re/v9RePjvRMAXLC+s+r75jJ/8XLH7gFGZwu84tKNbOtp5+y1HXzP06J6/2E7auMyR2nsak2xdWUrP983xGd/eYhrzujm4jmyzBKx8Nfnnv4pzl7bMWe76aYVrfz9DWfxwJExpIStcxRkc1HJzvSfi519k5y1psNVzGvxuudu5a+u3UahbLHJU2AKIVjX2cyxsQz3HBrl6jO65/x9gu2px8ZUu2v9v5cQglUdfsOY1csq/563PTXkXERtgmOvw359PnJsgrXLmlh5CrOqi7MO+3ycoUllNBgMBsNvN6ZojJhsoYT4/9u77zi3qjP/458jaao9xd1jj3u3ccNA6CXN9BLKwibsQhKyJLv5JfsjJEvKhoRkk18aaZuym7opJEtgE0gIsISSAIZgbNxwb+Px9N6rzu+Pe69G0kgz8lhzJeD7fr30Gls6ko7uXMt6dJ7zPAbyc5xDn4km7tlQ/CUctvQOhGNS+TKRnlrR1BWzOpOJPY27qtpYMn1izLHIGYcA+sfPHeZAXXvC23Yeb2NVgnLo6QzkNx9xgrZpRXnDVhq3HWth3pTChCskqf5O7vtrBbNLCzjPTY27at0sth1r4UhDJ919g/zv7loWTJ3A9KhA5dR5k/jr4SZau/u5c2PyVUZwVtfiVxq7+gY43NCZdB9ktBtPn8NbljtVDMecnppgdW0wbNld3Z5yX7x/fttSPnX5St5z3oKY68tK8/nzvno6egdG3M8ITgAdXRToaKSwTmorjcnkhYJMK8pj7uRCSgpHLmRjjCEUMDHHYm9N+7CU1/HmnZ/76tpZnaHUVBhahV4yIzP7GUVE5PVNQaPPutx9fN63+HkZLIQT32bCz+C1ZyA2cAVv9cK/lMyBwTDHm7tjgsZMrLruqhoesKX7y4TGjl4+8/Cr/Oi5I8Nua+7s43hLd0wRHE9OgiqZY/XSkWbmTynkzIVTIr30wNkPt7WihbUJVhkhqvjLCMfjuQMNPHegkZvOmBNJubxi7SyMgc/94VXe+rVn+OvhJm44bU7M/Ta4KapXrp01akqdEyjFzmFvTTvWJi+eE80Yw1euX8tnrlw15n5lQ9VTh/6dHG5w+lsmCvqTzeM95y7g7EWxbT1mlRTQOxAmFDCcvWjKiI+REzIxXzJ5hXXmjJAem6qzFk7hbStnpDQ2fsVzb207C6ZOIC/kX9EN73dibWYLwHjtLrTSKCIi4yE0+hBJp67+uJTMDKw0drp7GifkZS49tarFKe0fncrl97Gobu1hIGxj9mENNer2Zx51bT3Ut/eyKi5g8dJTrbVpadK9113Z2+6mgUbbVeUEcIkKj+QGT6xf5M9fOMqKsuJIMOax1vLy0WbevHw6C6ZO4OFtVbT39FOUn8ORxi5q2noiBWrijdan8c/76rntvzazbEYRN585P3J9WUkBZ8yfzBO761hRVsxXb1jLmQtjg6G3rJjORcumcefGZaO+tlDQDPtSY7ebZpust2O8SRNy+fuz5486LplE+zuHfn8nt4+szE3TPnXeJIpG6bGXE4gN1o40dlJWkj+sCNBYfPOm9SmPjf+d7K1p9z1wy4lqaL86yRcfvswjstKooFFERNJPQaPPunoHIvsZAXJDQd+Lvwyr4JqB9NSdx50PutEpdX4Xwkm0OuIdi3Su/u6ubuPhbVXcuXHZsADQ+8AfHzR6eyv7By25oZMPGl91i+3sqW6np38w5sO9V3kzfg7gruSkeCx+83Iln/ztTpbNKOLRD58X81oPNXTS1NnH6fMnRb4o2FfbzoZ5k3nWrdZ57hga2j+5p5bbf7aFxdMn8vP3vmlYSuPnrzmFPTXtXHJKWWQFMtr0onx+fOsZKb2+3ARtJnZXOwVoyiclrriabkON5IeOxc7jreSGAiyadnJpibPdyqWjpaZ68whbJzU2GDBUNHaNWIRnvET/Tjp7B6ho6uK6DeW+zsH7ogkyu9Lond9LlZ4qIiLjQOmpPosv/pIXCtDb739/RBjecsPv4i/xH3Rz3T6N1vqTolqRoHjHUO+39B2L+zdX8p2nD3KsqXvYbV7AFp8amZtixdBUeXsIB8J22H7CnVVtzC4tSNhIPS/Fgjz7atv55G93MKkwh7217WypaIm53dvPeNr8yZF2CN4q3bMHGiifVJC08mayPY39g2E++MutLJ05kV/e9iYmJ9gPuXh6EZevmZUwYDxRoQQtN3ZXt7GirGjUAjTpEgwYAib2WOyqamPFzKLIcRqr1bNLmZAbZOOqmaOOjW93caSxK6V2G+kWCppIAL2/rgPA13Ybzhyc4z67tCDhOeiX3FCAWSX5o64Si4iIjIWCRp9198c2tPe7SiYMpacWxldP9bn4y/K4D7rePBK1NRgPR5s6yQ0GmBlVGCUQMOS4wWu67HeLz2xLkho6f0rhsA96kcqQaZrHnpq2SAuF+BTVXcdbk6Y2JmriHq+zd4AP/GILE/NyePAD5zAhN8iv/loRM+alI82RaqWzSwsoyguxt6adwbDl+YONnLt4atI03GQpw0cbO+nsG+Td5yxIGPCmW04wtvhL2A3AU9nPmE6hYIB+t+WGtdapnDrGPZLRVs4qZudnNqZURCZSkCds6egdoKGjl3lT/V9pjD4/99YMb13jzxyyo6H97Rcs5J6rT8noHERE5PVLQaPPErWZyEQhnJgKrj6vNHofdOPTIf2uXFrR2EX5pIJhq1CpBEon4qC7ApJoP+HOqtbEVUvdQh7p+J0MDIbZV9vBm5dPZ+rEXLYda43c1tE7wOHGzqSFWVLZZ/rlx/ZysL6Db964jgVTJ3Dlulk8vL2Ktp7+yJjNR5rYMG8SxhiMMSybWcSemja2V7bQ3jPAOUlSU2HovIj/d3LAPa5LpvsTJOREBWsAlc3ddPQO+B405gSGVtcqm7tp6xk46f2MnlT3z0YXJ6pw07znTfZ/pdH5nTjHYk9NOwU5QeZM8jd49c7PTFZOBdgwbzJvWZFaASEREZETpaDRZ0711KE9jXk5/geNDR19lBTkRD4g+l0Ix/ugm6hiqJ/zqGjqYm6ClMh0trvo6B2gqrUHgG2VrTG3tXb3c6ypO2HVznQei8MNnfQNhFlRVszq2SXsON4SuW13dRvWkrRdg7PPNPnKb/9gmN++cpwr1szibDfwu/H0ufT0h/ndK06PxPr2Xo40dnH6/KHiOMvLithT086z+xsARgwac0OJv0zYX+sEjYum+xOshAKxRVe8faK+B41RrWmG9qP6XPwl6ndyuMFpt5EsvXhc5xE0kT23+2rbWTpjom+pwp65kws5a+GUlNJ6RUREXqsUNPqsu28gdk+jG6D4tY8P4JVjLTGpVH4Ha8mKvySqDDlerLVUNHbFNDj3OCnD6fl9eKuMs0ry2Xm8lcGo1NtXkxwHbw4AfYOp73cdTJLWu9vdw7iirJg15aUcqOugs9dJUX7ugBO0jXWl8cVDTbR09XPZmrLIdWvKS1hZVsx9L1awpaKZ9/70JQDOWjgUGC6bWUx7zwAPbKlk1aziEfeCRVag4+axv66D8kkFMYWlxlNOMMBg2BJ2j/Pu6jYCxv8WB6HAUGuaXVVtBAPG/5RMb+9v2PLKsWZyQ4GM9AcMBQIMhMN09Q2wtaIlYQXg8TYhL8R97zvT196QIiIiflPQ6LNh6alRVTL90NE7wN6aNtbPKY1cFwoYjPFvT+OrVa0EDCyfmaT4iw/Ba3NXP+29Awn7yp1oQ/u2nn56khQz8opzXHPqbLr6BjlY3xG5baRVoqFjkdp58dTeOtbc/RiVzV3DbttT3UYoYFg0bSJr55QQtk7FzZ7+QX7+wlEuXDYtpuF9/DxGStX9485qCnODMRU3jTHcdMYcXq1u4x3feZ6ath6+ceO6mPQ9L8g50tiVtGqqZ2hPY+yx2F/XwRJfm7i783BTVF+tbmP+1Akxe5T9kBtVkGfn8VYWT5uYllYXJyJSCGcgzMtHm1kzu8TX3ohD83C+4Hl8Vy1dfYNcsXaW73MQERF5I1DQ6LPuvthCON4Hrd4Bfyqobq9sIWxhfVQfPWPMCQdKJ2NnVRuLpk0c9mHbzwA6UeXU6HmkuqcxHLZc/e/P8ZH7tyW8/UBdBzlBw+VrnA+z26NSVHdVtTGjOI9pRXnD7ue12Ug1kH9qTx2dfYM8uOX4sNt2V7exePpEckMBVs8uBWDH8VZ+u/U4DR19vO+8hUkfd6SVxsGw5bFdtVy0bPqwoOWq9bM5ff4kPnDhIp6840KuWjc75vboCpfnLhk5aExUqGkwbDlY3+Hr6k58u4vd1W0p92dMp1AwwIDbw3N7ZWtGVte8Y9HRO8DO423D+nL6No+AYWAwzINbjzO71OnLKSIiIumnoNFH1lq6+geZENOn0d/U0K1uK4TolUZvHn7trdxVlfiDbroL4VhrufmHL/KzF44Ou+1oY/J9WCdSPfXFw00cqu/ksV01NHf2Dbv9QF0HC6ZOYOmMIibkBiPFcJwP/C1J96LlBk+sEM7LR5sBeHBL5bBU5z017ZGVvWlFecwqyeeVYy384NnDrCwr5qxFU4Y9nicnQZsJz+YjTTR09HLxKcP3chXn53D/7Wfz0YuXMyFvePpocX4Os0sLyA0FOH2UD/qJ2qAca+qibyDsWxEcGGqtMDBoaevpp7K52/f9jM48DP1hy9HGLho7+zISsIXc38krx1roGwyzfm6GgsZggKqWbp7dX88162f7vp9RRETkjUJBo48aO/sYDFuK8qMK4fjc7mJrRTMLp00Y1qIg1X58qXpyTy1vv/cZOty9c56Gjl5q23pH3seXpuC1qrWHv+xv4IuP7KauvSfmtmPuSmOiSosnstL4m5cr3RROy++3Vw27/UBdO4unTyQYMKwuL4kUw3n+YCMH6zu5aPn0hI97Iseis3eA3dVtzJtSyJHGrpgeiS1dfVS39sQEN2vKS3lsVw0H6jq47fwFI1bMHGml8Y87a8gNBZK+htG8ZcV0LltdNmpqZSBg3CI0Q/PwKqcu9nEfXaQNymCYPW6PyUysNOYGA/QPhNlS4XxRcOq8Uv/n4K6Ev3CoMWNzACeAPtLYRdg6KeAiIiIyPhQ0+uixXTUAnLdkaP+XFxz09vtT/GVLRQunJlgVSHd66qM7a9hX28GfdtfGXO8VwUlUMTT6Q3k6bDvWAkBn3yBfe3xfzG1HG7uYXpSXcD+aUzE0tWDtjzureceps1k+s4gH4lJDe/oHqWjqYrG7Gra2vJTdVW30DYT5+hP7mFmczw2nlSd87BMphLPtmJNy/NGNy8nPCfDglsrIbXvcIjjLo4Kb1eUl9A9aZhbnR9Jmk0l2LMJhy2O7arhg6TQmJlhJTMVnrzqFe/9mXUpjc4KBmLRlb69oRtJTw2F2Z6hyKrgN7cOWl482U5QX8nW1NTIHd6XxxcNNzJ1cyPSixHtix5u393ftnFIWTVMhGhERkfGioNFHj+yoZuHUCawoG/qQl2i/1nipaOqiqbOP9XNLh92WSj++E+Gtdj2yozrm+p3H3eIvZSMVf0lf0JgbDHDzmfP49eZjkWqlAEebupiboAiON49U5vDIjmq6+ga5bkM5155azivHWmIK3Rxu6CRshwKbNeWl9A2G+fFzh3npSDMfuGhR0uIhIxXC6ewdiKmU6qWmnrtkKhevmsnD26oie2QjwU3UHkIvNfnWc+ZHAqFkkp0X2ypbqG7t4ZIEqanjIT5leH9dOzOL8ynOz/Hl+cEpGAXQP2DZXd3GpMIcZhQP34863rw+olsqWlg3t3RYn1G/5gBOO5VTE7yf+CXkftH0jvVaZRQRERlPChp90tDRy6aDjVy2piwmHTAvjU3cRxNJZ0u00ngCKZmjae3u50BdBwU5QZ7eWx9p7wBOm4k5kwsoKRz+YT9ZP76xeuVYCytnFfORty+jpCCHzz/yamS/37EkPRq9eaQSxD+wpZL5UwrZMG8SV62bRcDA/0StNkZSKKd5QaMTKH/l8b3uKuOcpI+drBCOtZa3fe0ZvvDI7sh1m482s3TGREoKcnjHqeW09Qzw5O46wDneUybkxhTbOXPhFL79t+u55Zz5o77GZNVTn9pTRzBgfGsmHn9+Hqjr8L3FQ2TPrbvSuKKseMTU3nGbRyBAS1c/e2vaEv5b9oN3fgIZK4IDzu8kFDCqmioiIjLOFDT65NGdNYQtMf3sICo9NY3VU6tbu+nqGxh2/daKFibkBlmaoK9cOhvae2mht52/kN6BMH/a4wQwnb0DvHi4KWlPwLEUwklUfAac6po7jreybk4pJYU5fPgtS3juQCM/+MthevoHqWnrYd7kxE3hR2szAU7Q+cKhJq7bUI4xhunF+Zy3ZBr/s/V4pI/fgboOAgYWTnOep3xSAZMn5NI/aPnARYtG3MuXrBBOfXsvVa09/OLFClq7+gmHLVsqmiMf3M9ZPJXpRXl84Y97uOgrT3P/y5WsnBUb3AQCTjXXVFok5AYDhC0MxB2PzUebWVFWREmBPyt9OVG/k3DYcqDO38qp3hzASSXfW9uekdRUcFbXXq1uI2zh1AwFbF56KmRuDgA3nj6XT1+5asQ+nyIiInLyUgoajTHlxphvGWM2GWO6jDHWGDM/wbhJxpgfGGMajDGdxpgnjDGrE4zLN8Z82RhTbYzpdh/3/ATjAsaYu4wxR4wxPcaYbcaYa5PM8TZjzB5jTK8xZq8x5vZUXls6hcOWqpbuhLc9sqOaRdMmDGsE7qUhpqtyaU//IJd+4y/c8d/DW0BsqWhm7ZzE6Wyprq6lYmtFC8bAe85dwLSiPB7Z7qSofuNP+2no6OW9SVo8nGghnB89e5j19/wvP9t0ZNhtB+o66OobZO0cJ0B955nzuHjVTD7/yG4+9KutWAtzpxQkfNzRAujBsOU7Tx/AGLjm1KE9ie84dTbHW7p57mBDZA5zJhdGgkNjDBvmTaKsZORVRkh+LA646a/d/YPc91IFB+o7aO8ZYMM8pwJpMGD4+7Pn09LVx8KpE/jkZSv40nVrRnyukeQkaIMyMBjmlWMtnDbPv/YG0Xsaq9t66Oob9H0vn5cKub+unZ7+cEaK4IBzLAbDFmNgXVwVZD/nADAhNzjsPc1P5y6Zys1nzsvY84uIiLxRpLrSuBi4AWgG/pJogHGWMh4CLgY+CFwL5ABPGWPiq338ELgN+FfgcqAaeMwYsy5u3D3A3cC3gUuAF4D7jTGXxj33bcD3gQfc578f+I4x5v0pvr60+M2WSs7/0lORdg6e+vZeXjjUyGWry4als+XlpHcf3+Ov1tLc1c8fd9ZE9g8CdPUNsLu6PeF+RnCC13QFrlsqmlk2w1mFuvSUmTy1t44tFc388NnD3Hj6nKTpbN4H0b4U+jTuq23ni4/uYWJeiE/9bhf3/bUi5nZvtXNteWnksf/9nafy3nMX8NgupzjP3GQrjaFA0l6Rlc1d3PQfL3DfX4/xzjfNZXbpUOD59pUzmVmcz533b6eqpdtZDYsrzvH/rl3Dgx84e9SKoUNBY+wK9MF659xaPH0iP33+CC+61Sujj+k/XrSY7Xdv5Ie3nM57z1tIWUni4DgVifaZ7q5up6tv0NcVppygiXypsb/WKe7j90qjdyy8XpuZWmn0CkYtne7fSm88Lz117ZzSSCsSERERef1K9X/7P1trZ1hrL8UJyBK5EjgXuNlae5+19lH3ugDwUW+QMWYt8LfAP1tr/9Na+yecgLQC+GzUuOnAR4AvWmu/Yq19ylr7D8BTwBejxoWAzwM/s9Z+wh33SeAnwD3GGN8+Vb1wsJGBsOUPccVfHt3lpaYO33eT7pXG37xcSVlJPsX5Ib7+xP7I9S8ebmIwbJPugUpXIZxw2PLKsZZIcHrp6jJ6B8Lc+uOXKM4P8bGLlye9b6qFcPoGwnz4V69QlBfi8X8+nwuXTePj/7OD+zcfi4x5pbKF4vwQ86cMBYbBgOGTl6/ks1etYsO8STEN5qMlW2ncUdnKJV//C7uqWvnq9Wu556pTYm4vyA3y41tPp7N3gFt+/FcON3QOawkxeUJuSkFcboIVPoBD9R0U5gb52MXLqW7t4VtPHmDyhFzmJ9mfebJyEhRqevloEwCn+Ro0Om0mYGiv6BKfg0ZvpXF7ZQs5QeN70OrxvlzJVJsLGEpPzeR+RhEREfFPSkGjtTaVaOJKoMpa+1TU/VqBh4Gr4sb1A7+OGjcA/ArYaIzxKnZsBHKBn8c9z8+B1caYBe7fzwKmJRj3M2AKTiDrC6/QTHzF0Ie3VbF4+kSWJijckZfG3oQ1rT08u7+e6zeUc9t5C3lidy3bK1s4UNfBHf+9jdmlBbxpYeJG7nlpChoPN3bS2t3P+jnOh8nT5k9mWlEerd39fOzi5UwaYe9RqoVwvvGnfbxa3cYX3rGaWaUFfO9dGzhn0VTuenBHZBVq27EW1s4pTdjs++/Oms8D7z87aauIZKm6D2yppD8c5o8fOp9r3b2M8VaUFfP9mzdwuKGTvsHwsJXGVCVrP3KwvpOF0ybwluXTWTB1AnXtvZw6d9K4FWTJCw4PGjcfbWZWST6zSse+gnmiogvh7K/tYOrE3BHPpfHgBUo7j7exaNrEyPnqN29lL1NFcABmlRZw5dpZXK2qpSIiIm8I6fzUswrYmeD6XcBcY8zEqHGHrbVdCcbl4qTCeuN6gQMJxgGsjBpHgueOHzeuGjt6OdLYxezSAnYeb4ukqO483spfDzdxfZIg40Srp1qbfN/kg1srCVu4dkM5t5wzn9LCHD778Ku86wcvEjCGn7/3TSccKJ2orW6rDW+lMRgwvPfcBVy8auao+/i8QGmkoPHJPbV89+mDXL+hnLevcto95OcE+caN65iQF+JTv9tJd98ge2raI6mpJyo3rr2D56UjTayfMylp1VXP2Yun8pXr1zIhN8j6MX6wT7YCfbCug0XTJhIIGG51q5+O52pPTshrMzE0jy1Hm30vfhLdL3JnVWtGehN6KZnd/YMZ288IkON+EZLJAjS5oQDfvGm9eiOKiIi8QaQzaJyMs+cxXpP7c1KK4yZH/WyxXo+EkceR4DHjx42rV9w9dB/ZuBQgkqL6/T8foigvxE1vmpvwfkPVU0cP2A7Vd/C3//kiZ3/xyZgG7uAEk795uZIz5k9m3pQJFOXn8L7zF7L5aDNdfQP87D1nsGBq4j18kHpvQoADde18+nc7ufuhXWyvbCH6V7Slopmi/FDMh8l/uGAR37t5Q8JVv5g5jLLquu1YC//4i62smlXC3VeuirltysQ87ty4jBcONfHFP+5mMGxZO8YiIYnaj7T39LO7uo3T56f2Qf2qdbPZcffGMacwGmOG/U66+wY53tIdObbXb5jDLWfP5+r149duIFLF1T0eVS3dVLX2+JqaCs4XCv0DlmNNXeyqauPCZdN8fX6IrRiaqf2MAMUFOUwrymPhCP+eRURERNIp8bLT2BggUfWQ+EhhPMaRZGxSxpj3Ae8DmDs3cUB3IrZUNBMKGC5eVcZP5hzlkR3VXLFmFn/YXsVt5y1M2oQ8WcGTeN975iBf+9995IUCLJ0xkU/+difr506KBIJbj7VwqL6T289fFLnPLWfPp7K5mxtOmzPqh9xkexpfOtLEh+7byqzSApbMKKKmtZun9tZH5v2T54+wdMZEbj1nAddtKGdrRQvrkqSFjiYnQSqk52hjJ+/+yUtMLcrlR7eczoQEK6Y3nTGX/958jJ9uOgrA2vLErT1SmUf8sdha0ULYOum2qRrLMYgW/zs51ODs5fOCxoLc4LDgOd0iabLuPDYfdb6b2eBj5VRnHgHa+wciX8ZcurpslHuMzxw8mQwaP/zWJbz7nAUZ6REpIiIib0zpXGlsIvGqnrck0ZziuKaon5PM8E9GicaR4DEnx90ew1r7H9ba06y1p02bdvKrFluOtrCirJiC3CCXrZ7JzuNtfPqhXQQDhlvPWZD0fnkJCo3E21/bzhf/uIfzl0zjT//3An5y6xnkBAN88L4t9A4McrSxky8/upeCnCCXRvWBLMwN8W/XrE6pLH+y9NS/7G+gpq0HY5y9mjuOt/Lhty5h07+8mZc+/lY+f80p5IWC3PXgDt781afZW9N20imZiYLXf/rlVgat5Se3nhHTqD5aMGC456pTMAZmleQzvTh/bPMIBRgI20i/RYDNR5oIGJJWnx0Pzu9k6MsEr3Lqoun+rTDlxp2fW442U5gbZEWZv+mhXu/MP2yvZm15CXMmj0/hn5F4ATTg++uPVlqYO2qKtIiIiEg6pXOlcRfw9gTXrwQqrLUdUeOuMcYUxu1rXAn0MbSHcReQBywidl+jt0fx1ahx4OxtrB5h3LgZDFu2VbZw3Qans8glp5Txb4/s4ck9dVy3oZyZJcmDl0h6an/yoPGpvXUA3HP1qkgg9OXr1vC+n73Mtd99nt3V7YQCho9dvDzpnsXR5AaDMfvWPIfqnV6D999+diQNNTqOf+eb5vG3Z8zl6b313PvEPo41dXNWkmI7owkEDKGAGZYa2tk7wI7jrdzxtqWj7qFaO6eUj128PBKAjkX0imd+wEnPfOlIMyvKiilKsmI8HryUTM/Bug6MIaYi7HjzjmN/ZKWxiXUZaLOQGwpQ0dRFe88AH780eQXe8eS95hnFeUyZmPiLCxEREZHXo3R+8nsImG2MucC7whhTDFzh3hY9Lge4PmpcCPgb4HFrba979aM4QeQ7457nXcBOa+1h9++bgIYk45qA507iNUU0dPTypUf38PMXjg67bW+N27fOXWGbM7kwsp/ufecnbmTvCQUMxoy80vjMvnqWzSiKadXw9lUzufWc+eyr6eDmM+fx549exLvPTb6iOZrcUIDeBHM4WN8ZCdSMMQlT4owxXLR8Or/7x3P4y0cv4qxFYwsaIbaJu2e/22JhaZIWGfFuv2DRSR2LvLgqrv2DYbYea+b0E0hNTYf41d9DDZ2UTyoYtcdjuucAzvnZ2ev0+sxEm4WcYID2ngEgM6mpzhyccz+TqakiIiIimZDyspQx5jr3jxvcn5cYY+qBemvtMzjB4Cbg58aYO3HSUe/C2XP4Je9xrLWvGGN+DXzd7aF4GHg/sICowM9aW2eMuRe4yxjTDmzBCSzfTFQLD2ttvzHmU8B3jDHHgSfcMe8GPmit7Uv5aCTQ1tPPt588wM82HaW730kVLCnI4Yq1Q8VHvFYb0SXwP7ZxGa9Wt7F0xsiBjjFmxHYXnb0DvHS4mVvcSpnR/vXylXx043IKck8+iPAqhlprI4FhOGw53NDBOSkGgcaYk04bTLS3cl+N00ZjtGOZLjlxabK7qtro6Q9zWopFcNIlvhCOVznVT96x6B8M8/zBRgbD9oT2daZ7HuvmlFI+KTOpmd4cFDSKiIjIG82J5DLeH/f377g/nwEutNaGjTGXA19xb8vHCSIvstYei7vvrcDngc8BpcA24GJr7Za4cZ8AOoAPATOBvcAN1tqHowdZa79njLHAHcCdQAXwT9ba73CSvvDIbn790jGuWjeb2y9YxCd/u4OP3L+NeVMKWeO2dNhS0czUibnMmTy0Enj24qmcvXhqSs+RGwwkrZ666WAjfYNhLlw6fN+lMSYtASPENpP3WgtUtXbT0x9mkY9NzKNbK3j21baTFwow16d9bNHHApz9jEAGVhqDkfMiHLYcaug4qVXcsc1hKID+6fNHKSvJ52yf5+DMwzknL8vQKiPA1Il5XLN+NleuHb9qtSIiIiLZKOWg0Vo7aqk+a20Tzgrfu0cZ1w38X/cy0rhBnMDycyk89/eB74827kT0D4Z5ZEcNV62bzb1/sw6A775rA1d9+zlu+6/N/OffncYps0p4paKFdXPG3mA9OjiI9/S+Ogpzg2wY51Wu6DRE789e4RU/S/vnBs2wvZX73BW24ElWI01V/Erj5iPNzJ1cyIwxFtYZq+j01EgAn6GVxq3HWth0qJG7LlkeU0XU73lcsnqm78/tCQZM5H1ARERE5I0knYVwXneeO9BAa3d/zB6qqRPz+OEtp3Hddzdx5befY1JhDs1d/Vx3WvmYnydZeqq1lqf31nP2oqnkhcZ3H1tM5VK3xseherfFg48rjYmquO6vbefMMRbXGescwAmgrbVsPtrE+QlWesdbXjAQCaAjlVOn+dubz9vf+YsXKpiQG+TGM06+Pc1YXLN+NnMnF2YsNVVERETkjUxB4wge2VHNxLwQ5y2JTTNdPrOYJz9yAc/ub2DTwUb21razcdXYV0DyQgF6E/RpPNTQSWVzN7dfsCjBvdIr1w1KY/bQ1XdQnB9iyoTccX9+T47bWsHT1tNPdWsPS2b4GLhG9SY80thFQ0ef76mpADkhQ49bVfdgnf8BPAyt8HX0DnDrOfMpKfCvemy09XMnjbmVi4iIiIicHAWNSfQPhnn81VretnJGwmqV04vyecep5bzj1LGvMHoSFX8BeHpvPQAX+LDKFb13zXOwrpNF0yf62kQ8/ljsr3Urp073ry9eblT11J1HWgE43eciOOCs/rZ1OxVDDzV0UFKQ42sAD0PHImDg3SP0GxURERGR1y//Nye9Rjx/sJGWrn5fyvvnJUjJBHh6bx2Lpk3wpZH5UErm0IrnoYbMVOvsi2q5sb/W38qp3hzASU/dfKSJSYU5vh8HGAqgrbW8dLiZpTP8DeC9OQBcfMpMX85DEREREck+ChqT+MP2qoSpqeMhNxSgtz82aOwdGOSlI02ct8SfvXTenkavIE97Tz+1bb0s9HkPXW7UPj6AvbXtFOQEKZ9UMMK90j8HcBrabz7SzIZ5k30P1sBJGe4bDPPE7jr21rZzUwb2E07MC3HP1afwictW+v7cIiIiIpIdFDQm4KWmvnXFdF8aqScq/rLtWCs9/WHfWizkxaWnHooUXvF3hS3+WOyv7WDJjIkEfKqcCpDjHouq1h4ONXRmJDUVhvo0fuvJ/cybUpixVg83nzmP2aX+Be0iIiIikl0UNCbgpaZetsafD+l5oeCwPY0vHGrEGHjTAn8KsMT3JjzU4BZe8XmlMSdoYgrh7KttZ4mP+xlhaKVx08FGgIw0swenN+Hxlm62V7bygQsXEcpAqwsREREREX0KTeCR7Ymrpo6X3ODw6qmbDjayYmYxpYX+FD6JL4RzsK6TYMAwd7LP6alRhXBau/qpa+9lqY+VU705ADx/sIG8UIBTZhf7+vyRebhB4uzSAq5Zf/IFl0RERERExkJBY5z+wTCPvVrjW2oqDK8Y2tM/yJaKZt9SUyG6+IsTvB6s72De5MJIAOXnPLz01H11/hfBgaFgrbq1h7VzSse9R2bSebjH/vYLFvr+exARERER8eiTaBw/q6Z68uKCxm3HWugdCPvb0D44fE+j30VwvHl46an73MqpfvZohKE9jZCZVhueVbNKWFNewvWnzcnYHERERERE1Kcxjpeaer4PvRE9uaFApGopwCZ3P+MZPu6l81ayegfCDIYthxs7uXCZf8cgeh5e4Lqvpp0JuUHfi7DkRu0dzNR+RoCr18/m6vWzM/b8IiIiIiKglcYYmUhNheHpqS8camTVrGJKCnN8m0N09dTDDR30DYQzstKYEwzQP2ipb+/lDzuqWTe31P/ehG7QaAycOjdzK40iIiIiItlAQWOUTKSmglM9tddNyXT2M7Zw5gL/UlMhqhDOYJgfPnuY3GDA19VWT04wQG//IB97YDttPQN8+opVvs/BOxbLZhRRUuBf4C4iIiIiko0UNEbJRGoqDK00WmvZWtFCn8/7GWFode1QfSf3b67kxjPmUFbif2++3FCAzr5BntxTx12XLPe9CA44bT+MgdMyuJ9RRERERCRbaE+jy0tNfYvPqakwlBr6w2cP8+yBBgIGTvepP6PHW137xYtHCRjD+y9c5OvzR+YRdFJRz186jb8/a35G5hAKBvjGjes5bZ6CRhERERERBY2uB16upKWrn6vX+V94ZHpRHgCf+8NuAN62cobvaZFe0NjTH+bvz5qXkVVGgMUzipg7uZCvXLeGQMDfvYzRrlw7K2PPLSIiIiKSTRQ0AtbC15/Yz/q5pRmpGHrdhnLOWjSFCbkhigtyCGYgWAoFnJTMnGCA91+42Pfn91y5dhZXrCnzvfiNiIiIiIgkpqARaOjoxbT18PUb12UkWDHGUD6p0PfnjZ9DWXE+l6+dxcyS/IzPRUREREREsoOCRqC+vZcblk3zvfhMtnnijgvID/m7n1NERERERLKbgkZg0Fru3Lgs09PIuMJcnQ4iIiIiIhJLLTeA0oIcVs0qyfQ0REREREREso6CRsj4Hj4REREREZFspaARp2KoiIiIiIiIDKdoSURERERERJJS0CgiIiIiIiJJKWgUERERERGRpBQ0ioiIiIiISFIKGkVERERERCQpBY0iIiIiIiKSlIJGERERERERSUpBo4iIiIiIiCSloFFERERERESSUtAoIiIiIiIiSRlrbabnkHHGmFZgf4anUQK0ZngOAFOBhgzPIVuORTbMIxvmANkxj2w4NyE7jkU2zAGyYx7ZMAfIjvMzW45FNswjG+YA2TEPnZtDsmEe2TAHyI55ZMO5CdlxLLJhDgBLrLUliW4I+T2TLPVra+37MjkBY8x/ZHoO7jw2W2tPy/AcsuVYZHwe2TCHbJlHNpyb7jyy4VhkfA7ZMo9smIM7j4yfn1l0LDI+j2yYQ7bMQ+dmds0jG+aQLfPIhnPTnUc2HIuMz8GbR7LblJ7qeDjTEyA75pAtsuVYZMM8smEOkD3zyAbZcCyyYQ6QHfPIhjlki2w5Ftkwj2yYA2TPPDItW45DNswjG+YA2TOPbJANxyIb5gAjzEPpqRIjW771EYmnc1Oymc5PyVY6NyVb6dx8bdFKo8RLuiwtkmE6NyWb6fyUbKVzU7KVzs3XEK00ioiIiIiISFJaaRQREREREZGkFDS+Dhhjyo0x3zLGbDLGdBljrDFmfoJx64wxjxpjOowxbcaYh4wxixOMW2CM+Y0xpsUY02mMecoYM2LOuTHmJvd5K9P40uR1IFPnpzFmqjHmR8aYemNMtzHmRWPMxnF6mfIaY4y5zhjzgDHmqHt+7DXGfMEYUxQ3bpIx5gfGmAb3fHvCGLM6wePlG2O+bIypdh9vkzHm/FHmoPdNSShT56feN2U043Bu/psx5nFjTKP7fnhLCnPQe2cGKGh8fVgM3AA0A39JNMAYs8S9rQR4J3ArMB/4szFmetS4KcCzwCnAPwA3ujc9ZYxZkeSxS4F7gZqTfynyOuT7+WmMyQOeBC4GPgq8AzgG/N4Yc2HaXpm8ln0EGAQ+jnOefBd4P/C/xpgAgDHGAA+5t38QuBbIwTnfyuMe74fAbcC/ApcD1cBjxph1iZ5c75syCt/PT71vSorSfW5+ECgAfp/Kk+u9M4Ostbq8xi9AIOrP7wUsMD9uzA+AFqA06rpyoAf4UtR1nwQGgMVR100AaoH/TvL8/wE8BvwEqMz08dAluy6ZOD+Bd7nPc2HUdQbYDvw108dEl8xfgGkJrvs797x5s/v3q9y/XxQ1pgRoAr4Zdd1ad9ytUdeFgL3AQ0meX++buiS9ZOL81PumLqlc0nluutcH3J+L3fvcMsrz670zQxetNL4OWGvDKQw7E9hkrW2Jul8lsBO4Jm7cfmvtgahxnTirQJcbY0LRD2qMOQfnP5p/HPMLkNe1DJ2fZwLdwDNR4yzwOHC6MWb22F6NvF5Ya+sTXP2S+9M7P64Eqqy1T0XdrxWnj9VVUfe7EugHfh01bgD4FbDRXcGJ0PumjCZD56feN2VUaT43U/2MAOi9M9MUNL5xDAJ9Ca7vBRYZY/JTGFcALPKuMMbk4Hzj8+XoD/EiY5Du83MQ6Hc/8MSPAye9VSTeBe7P3e7PVThfXMTbBcw1xkyMGnfYWtuVYFwuzjfogN435aSM9/mp900Zq7GemynTe2fmKWh849gLbHD/0QHgblpehZN+Milq3BJ375g3LgCc4f51ctRjfgzIA74wjvOWN4Z0n597geIE+3DPihsnAoC7ivJZ4Alr7Wb36sk4e3HjNbk/J6U4Tu+bclJ8Oj/1vikn7CTPzROh984MU9D4xvENnLSB7xljZhtj5gE/Brxve7z0gO/hnBf/ZYxZZIwpA74JLIgeZ5yqlp8A/sla2+PTa5DXr7Sen8AvgXrgp8aY1W5FwI8D58eNE8H91vt3OPtlb42+CWePzbC7JPj7qOP0vilj4df5id435QSl4dxM9Xn03pkFFDS+QVhrn8PJAb8OqASOAKXAT3HS/ZrccYdwqlduAA4AVTjfMt7rPlS1+/ObOFXWXjDGlLrVrHJximaVGmMKxv1FyetGus9Pd2/ktcBUnCIO9cC7gbujx4m4qc8PAQuBje5eWk8TiVdXvG/Jm1Mc5327rvdNOSF+np9635QTkaZzM1V678wCChrfQKy13wGm4+xLmGutfSswC3jRWtsfNe4BnFWflThVKjfgrPgcs9ZWuMNWApfi/MP3Lje5j9eM0gfkBKX5/MRa+xecPY5LgRXuz36cQg9bfHlRktXcdOgHcNKbL7XW7ogbsgsnRTreSqDCWtsRNW6BMaYwwbg+nC84vL/rfVNSkoHzU++bkpI0npup0ntnFgiNPkReT6y1vTj/mHGbrL4Vp1Ry/LhB3A3NxphZwN8AX44aciOQH3e3f8FZAboeZ7VI5ISk8fz0xllgvztuIk6fsp+N4T8seZ1x98L+AngLcJm19oUEwx4CbjXGXGCtfca9XzFwBU4qX/S4z+C89/3UHRfCOS8fd89r0PumpChD5yeg900ZWZrPzVTpvTMLKGh8nTDGXOf+cYP78xJjTD1Qb619xm2m+n7geZxKaBtwGrM+aK29L+pxcoAv4ZTcbsP5pugunA/yX/XGJXqTMMbcAvRaa59O64uT1zy/z0937BeAl4EGnOqAd+J8Y37XeLxGec35d5wPG58HOo0xZ0bdVummWj0EbAJ+boy5E+cb7btw9uV8yRtsrX3FGPNr4OvuOXoY53xegJNO7Y3T+6akyvfzE/S+KSlJ27kJYIy5AJgGzHSvOs0Y0wFgrf2N+1PvndkgnU0fdcncBWfDcaLL0+7tM4AncP4j6AVeBe4AQnGPEwJ+j9MsvRc4CHwOKExhDj9BjVZ1SXDJxPkJ/Ajn28c+9+e3gMmZPha6ZMcFZ99ssvPy7qhxk91zqQnoAv4ErE3weAXA14AaoAd4kagm6SPMQ++bugy7ZOr81PumLqNdxuHcfDrZ440yD713+nwx7oEXERERERERGUaFcERERERERCQpBY0iIiIiIiKSlIJGERERERERSUpBo4iIiIiIiCSloFFERERERESSUtAoIiIiIiIiSSloFBERGSfGmKeNMU+f4H0uNMbcbYzR/9EiIpIV9B+SiIhIdrkQ+DT6P1pERLKE/kMSERERERGRpBQ0ioiIpIEx5kZjzB5jTK8xZpcx5pq42/ONMfcaY3YaYzqMMTXGmIeNMcujxtyNs8oI0G+MscYYG3V7oTHm/xljDhtj+tyfn1Aqq4iIjKdQpicgIiLyWmeMeSvwS+APwB3ANOAbQA6w1x2WBxQBnwOqgcnAB4AXjDHLrbU1wA+AcuA9wLnAYNRzhIDHgJXAPcAO4EzgU+5j3TGuL1JERN6wjLV29FEiIiKSlDHmOWAScIq1Nuxe9ybgBeAZa+2FCe4TxAkka4F/tdbe615/N85qY461diBq/M3AfwEXWGv/HHX9J9zx5dbaunF5gSIi8oamdBYREZGT4AZ/pwO/8QJGAGvti8CRuLE3GGNeNMa0AANAJzARWJbCU10MHAWeN8aEvAvwOM6K5plpeDkiIiLDKD1VRETk5EzFCdpqE9wWuc4YcwXwa+CnwGeABiAMPALkp/A804F5QH+S26ekPmUREZHUKWgUERE5OQ04gdyMBLfNwFkdBLgROGCtvcW70RiTg7MfMRWNwGHghiS3H0nxcURERE6IgkYREZGTYK0dNMa8BFxnjLk7bk/jfIaCxkKclNRoNwPBuOt63Z8FQHvU9Y8C1wId1to96XsFIiIiI1PQKCIicvI+jbO38LfGmO/jVE/9DFATNeZR4GpjzL3A74ENwP8BWuIe61X35x3GmD8Cg9bazcAvgFuBPxljvgpsA3KBRcCVwNXW2q5xeG0iIvIGp+qpIiIiaWCMuQm4G2d18QDwSeBDANbaC91eip8F3g2UAi8BHwb+B3jaS1t1C+t8E7geZ7+ksdYa97Z84F9wUl0X4BTSOYjT6uNz0dVWRURE0kVBo4iIiIiIiCSllhsiIiIiIiKSlIJGERERERERSUpBo4iIiIiIiCSloFFERERERESSUtAoIiIiIiIiSSloFBERERERkaQUNIqIiIiIiEhSChpFREREREQkKQWNIiIiIiIiktT/B+rTJHE4sA9lAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "retail_df_train.plot(x=\"date\", y=\"sales\", figsize=(15,5));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- It looks like there's a **trend** here - the sales are going up over time. \n",
    "- This is somewhat captured by the fact that you can look at the last 5 time points, which will also be higher.\n",
    "- But if you want to forecast much farther into the future, nothing in our model accounts for the trend. \n",
    "- This is seen in the forecasts in Tom's notebook. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's say we encoded the date as a feature in days like this:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>sales</th>\n",
       "      <th>sales-1</th>\n",
       "      <th>sales-2</th>\n",
       "      <th>sales-3</th>\n",
       "      <th>sales-4</th>\n",
       "      <th>sales-5</th>\n",
       "      <th>Days_since</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1992-01-01</td>\n",
       "      <td>6938</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1992-02-01</td>\n",
       "      <td>7524</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1992-03-01</td>\n",
       "      <td>8475</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1992-04-01</td>\n",
       "      <td>9401</td>\n",
       "      <td>8475.0</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>91</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1992-05-01</td>\n",
       "      <td>9558</td>\n",
       "      <td>9401.0</td>\n",
       "      <td>8475.0</td>\n",
       "      <td>7524.0</td>\n",
       "      <td>6938.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>2016-09-01</td>\n",
       "      <td>19816</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>21648.0</td>\n",
       "      <td>20412.0</td>\n",
       "      <td>9010</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>2016-10-01</td>\n",
       "      <td>20544</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>21648.0</td>\n",
       "      <td>9040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>2016-11-01</td>\n",
       "      <td>23704</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>20157.0</td>\n",
       "      <td>9071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>2016-12-01</td>\n",
       "      <td>34611</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>20676.0</td>\n",
       "      <td>9101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>300</th>\n",
       "      <td>2017-01-01</td>\n",
       "      <td>15791</td>\n",
       "      <td>34611.0</td>\n",
       "      <td>23704.0</td>\n",
       "      <td>20544.0</td>\n",
       "      <td>19816.0</td>\n",
       "      <td>22394.0</td>\n",
       "      <td>9132</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>301 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          date  sales  sales-1  sales-2  sales-3  sales-4  sales-5  Days_since\n",
       "0   1992-01-01   6938      NaN      NaN      NaN      NaN      NaN           0\n",
       "1   1992-02-01   7524   6938.0      NaN      NaN      NaN      NaN          31\n",
       "2   1992-03-01   8475   7524.0   6938.0      NaN      NaN      NaN          60\n",
       "3   1992-04-01   9401   8475.0   7524.0   6938.0      NaN      NaN          91\n",
       "4   1992-05-01   9558   9401.0   8475.0   7524.0   6938.0      NaN         121\n",
       "..         ...    ...      ...      ...      ...      ...      ...         ...\n",
       "296 2016-09-01  19816  22394.0  20676.0  20157.0  21648.0  20412.0        9010\n",
       "297 2016-10-01  20544  19816.0  22394.0  20676.0  20157.0  21648.0        9040\n",
       "298 2016-11-01  23704  20544.0  19816.0  22394.0  20676.0  20157.0        9071\n",
       "299 2016-12-01  34611  23704.0  20544.0  19816.0  22394.0  20676.0        9101\n",
       "300 2017-01-01  15791  34611.0  23704.0  20544.0  19816.0  22394.0        9132\n",
       "\n",
       "[301 rows x 8 columns]"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "retail_train_5_date = retail_lag_5.query('date <= 20170101')\n",
    "first_day_retail = retail_train_5_date[\"date\"].min()\n",
    "\n",
    "retail_train_5_date.assign(Days_since=retail_train_5_date[\"date\"].apply(lambda x: (x-first_day_retail).days))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Now, let's say we use all these features (the lagged version of the target and also `Days_since`.\n",
    "- If we use **linear regression** we'll learn a coefficient for `Days_since`. \n",
    "  - If that coefficient is positive, it predicts unlimited growth forever. That may not be what you want? It depends.\n",
    "- If we use a **random forest**, we'll just be doing splits from the training set, e.g. \"if `Days_since` > 9100 then do this\".\n",
    "  - There will be no splits for later time points because there is no training data there.\n",
    "  - Thus tree-based models cannot model trends.\n",
    "  - This is really important to know!!\n",
    "- Often, we model the trend separately and use the random forest to model a de-trended time series."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## What did we not cover? (5 min)\n",
    "\n",
    "- A huge amount!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Traditional time series approaches\n",
    "\n",
    "- Time series analysis is a huge field of its own (notice a pattern here?)\n",
    "- Traditional approaches include the [ARIMA model](https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average) and its various components/extensions.\n",
    "- In Python, the [statsmodels](https://www.statsmodels.org/) package is the place to go for this sort of thing.\n",
    "  - For example, [statsmodels.tsa.arima_model.ARIMA](https://www.statsmodels.org/stable/generated/statsmodels.tsa.arima_model.ARIMA.html).\n",
    "- These approaches can forecast, but they are also very good for understanding the temporal relationships in your data.\n",
    "- We will take a different route in this course, and stick to our supervised learning tools."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Deep learning \n",
    "\n",
    "- Recently, deep learning has been very successful too.\n",
    "- In particular, [recurrent neural networks](https://en.wikipedia.org/wiki/Recurrent_neural_network) (RNNs).\n",
    "  - These are not covered in CPSC 340, but I believe they are in 540 (soon to be renamed 440).\n",
    "  - [LSTMs](https://en.wikipedia.org/wiki/Long_short-term_memory) especially have shown a lot of promise in this type of task.\n",
    "  - [Here](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) is a blog post about LSTMs.\n",
    "  - [Here](https://www.tensorflow.org/api_docs/python/tf/keras/layers/LSTM) is the documentation for the LSTM in tf.keras."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Types of problems involving time series\n",
    "\n",
    "- A single label associated with an entire time series. \n",
    "  - We had that with images earlier on, you could have the same for a time series.\n",
    "  - E.g., for fraud detection, labelling each transaction as fraud/normal vs. labelling a person as bad/good based on their entire history.\n",
    "  - There are various approaches that can be used for this type of problem, including CNNs (Lecture 14), LSTMs, and non deep learning methods.\n",
    "- Inference problems.\n",
    "  - What are the patterns in this time series?\n",
    "  - How many lags are associated with the current value?\n",
    " - Etc."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Unequally spaced time points\n",
    "\n",
    "- We assumed we have a measurement each day.\n",
    "- For example, when creating lag features we used consecutive rows in the DataFrame.\n",
    "- But, in fact some days were missing in this dataset.\n",
    "- More generally, what if the measurements are at arbitrary times, not equally spaced?\n",
    "  - Some of our approaches would still work, like encoding the month / looking at seasonality.\n",
    "  - Some of our approaches would not make sense, like the lags.\n",
    "  - Perhaps the measurements could be binned into equally spaced bins, or something.\n",
    "  - This is more of a hassle."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Other software package\n",
    "\n",
    "- One good one to know about is [Prophet](https://facebook.github.io/prophet/docs/quick_start.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Feature engineering\n",
    "\n",
    "- Often, a useful approach is to just _engineer your own features_.\n",
    "  - E.g., max expenditure, min expenditure, max-min, avg time gap between transactions, variance of time gap between transactions, etc etc.\n",
    "  - We could do that here as well, or in any problem.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## T/F questions (Piazza)\n",
    "\n",
    "1. The rain in Australia dataset contains a single time series; that is, each date has a unique row associated with it.\n",
    "2. A reasonable approach to encoding the date would be one-hot encoding the days of the year (from 1-365).\n",
    "3. It is better to OHE the month than to encode it as an integer (i.e. ordinal).\n",
    "4. It is important to train/test split before we create our lagged features.\n",
    "5. If we have a feature with lag 3 in our dataset, that feature will be missing if we try to forecast 5 days into the future.\n",
    "\n",
    "<br><br><br><br><br><br>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
